时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
Submits : 2 | Solved : 1
题目描述
小K是个苦命的孩子,他的师傅为了多赚钱,以减肥为理由,让他去采药,并说不完成不能吃饭。野地里有许多不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。要求在规定的时间t里,采到的草药的总价值最大。
输入要求
第一行有2个整数T(1≤T≤1000)和M(1≤M≤100),一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。
接下来的M行每行包括两个在1到100之间包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
输出要求
1个整数,表示在规定的时间内可以采到的草药的最大总价值。
输入样例
70 3
71 100
69 1
1 2
输出样例
3
来源
NBU OJ
#include<iostream>
using namespace std;
struct glass
{
int time;
int val;
}g[100];
int max(int a,int b)
{
if(a>b) return a;
else return b;
}
int main()
{
int T,M;
cin>>T>>M;
int i=0;
for(i=1;i<=M;i++)
{
cin>>g[i].time>>g[i].val;
}
int dp[100][1000];
for(i=0;i<M;i++)
dp[i][0]=0;
for(i=0;i<T;i++)
dp[0][i]=0;
for(i=1;i<=M;i++)
{
for(int j=1;j<=T;j++)
{
if(j>=g[i].time)
dp[i][j] = max(dp[i-1][j],dp[i-1][j-g[i].time]+g[i].val);
else
dp[i][j] = dp[i-1][j];
}
}
cout<<dp[M][T]<<endl;
return 0;
}