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;
}