列表

详情


NC208609. 旅游的事前准备

描述

旅游前要准备很多零食,现在你家里有n个零食,零食有两个数值,一个是w重量,一个是z开心值,带走所有零食肯定是最令人开心的,但是你的背包只能装合计不超过m重量的东西,请想办法带哪些东西去让这次旅行尽可能更开心,输出最大的开心值之和。

输入描述

第一行两个数n(1<=n<=20),m(1<=m<=1000),分别表示零食的数量和背包最大载重

接下来n行,每行两个数w,z(1<=w,z<=1000),第i种零食的重量与开心值(wi,zi)。

输出描述

输出一个数,最大开心值的合计。

示例1

输入:

4 20
10 18
11 22
4 7
6 11

输出:

36

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 400K, 提交时间: 2020-07-25 19:01:53

#include<bits/stdc++.h>
using namespace std;
int dp[1010];
int main()
{
	int n,m,w,z;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>w>>z;
		for(int j=m;j>=w;j--)
		{
			dp[j]=max(dp[j],dp[j-w]+z);
		}
	}
	cout<<dp[m]<<endl;
}

上一题