采仙草-01背包

Adrian想挖一些仙草。仙人告诉他,前方有一块草场可以采集仙草,这些仙草的价值和采集所用时间会有不同。Adrian不想浪费这次挖仙草的机会,当然希望能挖到仙草的总价值最大,请你帮Adrian计算一下在一定的时间T内能挖到的仙草价值总和最大值。

Input
输入第一行有两个整数T和N由一个空格分隔,其中T表示总共用以采药的时间,N表示草场共有N棵仙草。接下来有N行,每行是两个整数t和v由一个空格分隔,表示各棵仙草采集所需要的时间和仙草的价值

1≤T≤1000
1≤N≤10
1≤t,v≤100
Output
输出只有一行,一个整数,表示在时间T内Adrian可以采到仙草的最大总价值。

Sample Input
70 3
71 100
69 1
1 2
Sample Output
3

思路
简单01背包

#include<iostream>
#include<algorithm>
using namespace std;
struct Herb{
	int time,value;
	double vt;
}herbs[20];
int dp[10001];
int main()
{
	int T,n,ans=0;
	cin >> T >> n;
	for(int i=0;i<n;i++)
	{
		cin >> herbs[i].time >> herbs[i].value;
		herbs[i].vt=herbs[i].value/herbs[i].time;
	}
	for(int i=0;i<n;i++)
	{
		for(int j=T;j>=herbs[i].time;j--)
			dp[j]=max(dp[j],dp[j-herbs[i].time]+herbs[i].value);
	}
	cout << dp[T] << endl;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值