0-1背包问题(动态规划)

0-1背包问题,在动态规划方面有"Hello world"的地位。

输入:

输入种类数目n,背包最大容量m;每个种类的物品只有1个;

接下来依次输入物品的重量和价值;

输出:

输出最大可能的价值和;

#include<iostream>
#include<algorithm>
using namespace std;

int n,m,value[3500],weight[3500],ans[13001]= {0};

int main() {
	cin >>n>>m;//输入物品的种类 和背包最大容量
	for (int i=0; i<n; i++)cin >>weight[i]>>value[i];
	//完成信息的读入;
	//假设第i个以前的已经放好了
	for (int i=0; i<n; i++) { //关于第i个物品进行遍历
		for (int j=m; j >= 1; --j) { //j表示关于重量的容量
			if (i==0 && j >= weight[i]) {
				ans[j] = value[i];
				continue;
			}//初始化设置
			if(j >= weight[i]) {
				ans[j] = max(ans[j],ans[j-weight[i]] + value[i]);
			} 
		}
	}
	cout << ans[m]<<endl;
}

//好玩!欢迎大家指出问题!一起讨论,一起学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值