您的位置:首页 > 其它

(ssl 1236)逃亡的准备

2017-12-16 09:53 169 查看
Description  在《Harry Potter and the Deathly Hallows》中,Harry Potter他们一起逃亡,现在有许多的东西要放到赫敏的包里面,但是包的大小有限,所以我们只能够在里面放入非常重要的物品,现在给出该种物品的数量、体积、价值的数值,希望你能够算出怎样能使背包的价值最大的组合方式。
分析:既然是数量(多重背包),考虑到数量最大值(5000),二进制优化是可以的。

#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,n1; int v[50001],w[50001],f[501];
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
int x,y,s,t=1;
scanf("%d%d%d",&s,&x,&y);
while (s>=t){ //二进制优化(例:9分成1,2,4,2,可以表示1~9的任何数)
v[++n1]=x*t;
w[n1]=y*t;
s-=t; t<<=1;
}
v[++n1]=x*s;
w[n1]=y*s;
}
for (int i=1;i<=n1;i++)
for (int j=m;j>=v[i];j--) //01背包
f[j]=max(f[j],f[j-v[i]]+w[i]);
printf("%d",f[m]); return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: