0-1背包问题,在动态规划方面有"Hello world"的地位。
输入:
输入种类数目n,背包最大容量m;每个种类的物品只有1个;
接下来依次输入物品的重量和价值;
输出:
输出最大可能的价值和;
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,value[3500],weight[3500],ans[13001]= {0};
int main() {
cin >>n>>m;//输入物品的种类 和背包最大容量
for (int i=0; i<n; i++)cin >>weight[i]>>value[i];
//完成信息的读入;
//假设第i个以前的已经放好了
for (int i=0; i<n; i++) { //关于第i个物品进行遍历
for (int j=m; j >= 1; --j) { //j表示关于重量的容量
if (i==0 && j >= weight[i]) {
ans[j] = value[i];
continue;
}//初始化设置
if(j >= weight[i]) {
ans[j] = max(ans[j],ans[j-weight[i]] + value[i]);
}
}
}
cout << ans[m]<<endl;
}
//好玩!欢迎大家指出问题!一起讨论,一起学习!