子集和大于等于阈值的最优解

hmx681130 2017-12-16 10:37:59
给定一个集合,要求子集和大于等于阈值,子集和最接近阈值的最优解。
如 7,12,9,20,15;如果阈值是16,那么最优解是7,9;如果阈值是17,那么最优解是7,12
这个问题属于什么问题,能用背包解决吗?没想出来转移方程,求解
...全文
559 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
欢乐的小猪 2018-01-22
  • 打赏
  • 举报
回复
穷举,python2.7代码如下
# coding=utf_8
import numpy as np
import itertools
from pandas import Series,DataFrame
import pandas as pd

if __name__=='__main__':
v=[7,8,9,20,10]
threshold=17
df=DataFrame(columns=v)
#穷举v的2的5次方组合
for item in itertools.product(range(2),repeat=len(v)):
df.loc[df.shape[0]+1]= list(item)
#增加一列sum为每一种组合情况的和值
df['sum']=df.apply(lambda x:np.dot(x,v),axis=1)
#增加一列为和值的排名
df['rank']=df.rank(method='average')['sum']
#输出此排名的所有数据
print df[df['rank']==df[df['sum']>=threshold]['rank'].min()]

输出结果如下
oyljerry 2018-01-11
  • 打赏
  • 举报
回复
先把集合排序,然后遍历,相加,判断
hmx681130 2017-12-30
  • 打赏
  • 举报
回复

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧