其他分享
首页 > 其他分享> > 动态规划:背包问题

动态规划:背包问题

作者:互联网

小偷带有能装一定质量的背包,所偷每个物品都有质量和价值,求在装的下的情况下,所偷最大收益;

代码:

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