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;
}
借鉴了一个博客,我对代码加了点注释,那个博客找不到了,也没法贴地址//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;
}
相关文章推荐
- 061_改变DP对象的01背包问题
- rnqoj 拔河问题 一重背包问题(递归求解,dp求解)
- dp 背包问题01的优化
- 01背包问题——<DP>
- DP实例之01背包问题C语言实现
- POJ 状态DP+ 01 背包问题
- hdu 1574 RP问题 dp 01背包
- DP背包问题小结(01背包,完全背包,需恰好装满或不需,一维DP、二维DP)
- 夕拾算法进阶篇:17)01背包和完全背包问题 (动态规划DP)
- 九度OJ 1152:点菜问题 (01背包、DP)
- 动态规划求解01背包相关的基本问题
- 九度OJ 1152:点菜问题 (01背包、DP)
- 01背包问题 第一次DP
- 动态规划求解01背包相关的基本问题
- dp中滚动数组的应用:01背包、POJ 1159 Palindrome、多段图路径问题
- 01背包问题(用c语言实现)-回溯法求解
- 算法导论-----------------0-1背包问题dp求解
- DP之一般背包问题
- 01背包问题——经典DP问题,优化与未优化
- 夕拾算法进阶篇:18)装箱问题 (01背包_动态规划DP)