您的位置:首页 > 其它

0-1背包问题详解一

2013-07-08 21:31 344 查看
问题描述:

给定n种物品和一个背包。物品i的重量是w(i),其价值为v(i),背包的容量为c(即最多能够装c重量的物品)。

给定样例:

输入n=5,c=6.物品容量和价值分别为:

2 6

2 3

6 5

5 4

4 6

最后输出时:12

解法:

一般动态规划的解法都会有公式:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}.

该公式也可以转换为f[v]=max{f[v],f[v-c[i]]+w[i]}

具体解释在这里就不阐述了,可以参照文献背包问题

void knapsack(){
int c,n;
cout<<"请输入最大容量,小于100"<<endl;
cin>>c;
cout<<"请输入背包个数"<<endl;
cin>>n;
cout<<"请输入各个背包重量和价值"<<endl;
for(int i=1;i<=n;i++){
cin>>w[i]>>v[i];
}
for(int i=0;i<=n;i++)
p[i]=0;
for(int i=1;i<=n;i++)
for(int j=c;j>=w[i];j--)
p[j]=max(p[j],p[j-w[i]]+v[i]);
cout<<"结果是"<<p[c]<<endl;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: