您的位置:首页 > 其它

01背包问题的一般DP求解

2018-02-13 20:43 246 查看
老代码了,记录一下吧。
借鉴了一个博客,我对代码加了点注释,那个博客找不到了,也没法贴地址//01背包问题
int bag()
{
//注意--体积和花费都是正整数
//a[i][j]代表前i件物品可以放入j体积的背包中的最大价值(前i件物品并不一定都放的进去)
//数组的0下标都未使用
int a[6][13] = {{0}};
int val[6] = {0 , 2 , 5 , 3 , 10 , 4}; //花费
int vol[6] = {0 , 1 , 3 , 2 , 6 , 2}; //物体体积
int bagV = 12;

for( int i = 1; i< sizeof(val)/sizeof(int); i++)
{
for( int j = 1; j<=bagV; j++)
{
if(j<vol[i])
//第i件物品无法放入背包
a[i][j] = a[i-1][j];
else
//a[i-1][j]----不把第i件物品放进背包的价值
//a[i-1][j-vol[i]] + val[i]----把第i件物品放入背包的价值
a[i][j] = max(a[i-1][j] , a[i-1][j-vol[i]] + val[i]);
// cout<<a[i][j]<<' ';
}
cout<<endl;
}
cout<<a[5][12]<<endl;

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