题目描述
小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
思路:
和动态规划下的01背包问题一样
struct zy{int time;int val;}z[100];int dp[100][1000];int max(int a,int b){return (a > b) ? a : b;}int main(){int T,M;cin>>T>>M;int i = 0;for(i = 1;i<= M;i++){cin>>z[i].time>>z[i].val;}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>=z[i].time)dp[i][j] = max(dp[i-1][j],dp[i-1][j-z[i].time]+z[i].val);elsedp[i][j] = dp[i-1][j];}}cout<<dp[M][T]<<endl;return 0;}
如果觉得《采草药算法》对你有帮助,请点赞、收藏,并留下你的观点哦!