求解背包问题

在n个物品中选择m个,每个物品有两个值a[i],b[i],满足在a[i]最小的情况下b[i]尽量大。求伪代码。... 在n个物品中选择m个,每个物品有两个值a[i],b[i],满足在a[i]最小的情况下b[i]尽量大。求伪代码。 展开
 我来答
关汉卿天使
2011-08-29
知道答主
回答量:43
采纳率:0%
帮助的人:32万
展开全部
用递归来搜索
function Make(i{处理第i件物品},j{剩余空间j}:integer):integer;
{初始时i=n,j=m}
begin
if i:=0 then
Make:=0;
if j>=a[i] then{剩余空间可以放下i}
r1:=Make(i-1,j-a[i])+b[i];{放入价值}
r2:=Make(i-1,j){不放入价值}
Make:=max(r1,r2);
end;
我是你50分就直接要代码了。。。
追问
可以写DP吗?
追答
好吧,本来想偷懒的。。。
好像刚才的回答有点问题,你能不能把题目详细的打一遍。。。
你问的真的是背包问题吗?

参考资料: 手打

abdcfaferadfa
2011-08-29 · TA获得超过2312个赞
知道小有建树答主
回答量:591
采纳率:0%
帮助的人:577万
展开全部
这题不用DP啊!普通模拟排序即可。
因为题目首先要求a[i]最小,也就是说若a[i]<a[j],不管b[i]和b[j]关系如何, 物品i必然优于j
所以将物品按a[i]排序,从小到大
然后所有值小于a[m]的必然要取,接着取出所有和a[m]值相等的元素,
将其按b从大到小排序,逐个取出即可
judge = a[m]
for i = 1->n
begin
if a[i]=judge
begin
c[top] = b[i]
inc(top);
end;
end;
算了你如果看懂了文字说明就好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式