52. 携带研究材料

题目描述

小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的空间,并且具有不同的价值。

小明的行李空间为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料可以选择无数次,并且可以重复选择。

输入

第一行包含两个整数,N,V,分别表示研究材料的种类和行李空间 

接下来包含 N 行,每行两个整数 wi 和 vi,代表第 i 种研究材料的重量和价值

输出

输出一个整数,表示最大价值。

样例输入 复制
4 5
1 2
2 4
3 4
4 5
样例输出 复制
10
提示

第一种材料选择五次,可以达到最大值。

数据范围:

1 <= N <= 10000;
1 <= V <= 10000;
1 <= wi, vi <= 10^9.

#include
#include
using namespace std;

int n,bagweight; // 种类    空间 

void chose(){
	vectorweight(n);
	vectorvalue(n);
	for(int i = 0;i > weight[i] >> value[i];
	}
	//完全背包:一个物品可以被拿n次,所以,是正序。 拓展:先物品后背包,是组合数,即不允许集合重复。 先背包后物品,是排列数,顺序不一样也算
	
	
	//dp[j]:容量为j的背包,最多可放dp[j]的价值
	
	vectordp(bagweight+1);
	
	//递推关系:dp[j] = max(dp[j], dp[j-weight[i]] + valu[i]);
	
	//初始化;dp[0] = 0;
	for(int i = 0;i < n;i++){
		for(int j = weight[i];j <= bagweight;j++){
			dp[j] = max(dp[j], dp[j-weight[i]] + value[i]);
		}
	} 
	cout << dp[bagweight];
}
int main(){
	cin >> n >> bagweight;
	chose();
	return 0;
}

你可能感兴趣的:(leetcode练习,算法,动态规划,c++)