题目:点击打开链接
题目大意: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; }