0 1背包

题目大意:

给你n个物品,

第一行给出n

第二行给出第i个物品的价值

第三行给出第i个物品的重量

第四行给出背包总重量

要求给出可得最大价值

代码如下:

#include<iostream>
#include<vector>
using namespace std;
//0 1背包

int main(){
	int n;
	scanf("%d",&n);
	vector<int>val(n);
	vector<int>weight(n);
	for(int i=0;i<n;++i){
		scanf("%d",&val[i]);
	}
	for(int i=0;i<n;++i){
		scanf("%d",&weight[i]);
	}
	vector<vector<int > >d(1000,vector<int>(1000));
	int maxweight;
	scanf("%d",&maxweight);
	for(int i=0;i<=n;++i){
		for(int j=0;j<=maxweight;++j){
			d[i][j]=(i==0)?0:d[i-1][j];
			if(i>0&&j>=weight[i-1]&&d[i][j]<d[i-1][j-weight[i-1]]+val[i-1])d[i][j]=d[i-1][j-weight[i-1]]+val[i-1];
			cout<<d[i][j]<<ends;
		}		
	}
	printf("%d\n",d[n][maxweight]);
	return 0;
}

关于更多01背包概念可参考http://www.hawstein.com/posts/dp-knapsack.html

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦