题目:点击打开链接
题目大意:T时间内能采到的草药的最大总价值,M:草药的数目。每个草药有摘采时间t,价值val
注意:
1、结构体和重载函数的编写方法!
2、状态转移不要忘了else
3、sort函数,到a.end()
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int dp[101][1001]={0};
struct P//结构体的编写方法
{
int t,val;
bool operator < (const P &a)const//重载函数的比较方法!
{
if (val==a.val)
return t<a.t;
else
return val<a.val;
}
};
P a[101];
int main()
{
int i,j,T,M;
cin>>T;cin>>M;
for (i=1;i<=M;i++)
cin>>a[i].t>>a[i].val;
sort(a+1,a+M+1);//注意后面排序要加1
for (i=1;i<=M;i++)
for (j=1;j<=T;j++)
if (a[i].t<=j)//若当前物品时间<总时间
dp[i][j]=max( dp[i-1][j],dp[i-1][j-a[i].t]+a[i].val );
else
dp[i][j]=dp[i-1][j];//注意否则不要往,否则一定不拿
cout<<dp[M][T];
return 0;
}