动态规划:背包问题
作者:互联网
小偷带有能装一定质量的背包,所偷每个物品都有质量和价值,求在装的下的情况下,所偷最大收益;
代码:
dp:0-1背包问题
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>//初始化函在cstring里面;
using namespace std;
int f[5][9]={0};//所偷得的价值;[5]代表状态为偷到某一个物品,[9]代表小偷背包此时的重量,f[1][8]表示的就是偷1的时候此时的重量为8,其值即为所投的钱;
int w[5]={0,2,3,4,5};//五个编号,w代表要偷物品的编号:
int v[5]={0,3,4,5,8};//四件物品的价值;
int main(){
int i,j;
memset(f,0,sizeof(f));//初始化f:
for(int i=1;i<5;i++){//所偷物品的编码;
for(int j=1;j<9;j++){//背包的容量;
if(w[i]>j){
f[i][j]=f[i-1][j];//太重偷不了,这次的钱和上次一样;
}else {
f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i]);//此时的钱,为偷或者不偷的最大值,才是最大收益,不偷就是上一次的钱,偷了就说上一次的钱和这一次偷的钱;
}
}//得到了第i个物品的结果;
}
for(int i=0;i<5;i++){
for(int j=0;j<9;j++){
printf("f[%d][%d]=%d\n",i,j,f[i][j]);
}
}
return 0;
}
标签:背包,int,不偷,所偷,物品,include,规划,动态 来源: https://blog.csdn.net/m0_51711089/article/details/122178446