不管如何,我又去刷水题了。这些题分为N个难度级别,第i个难度级别有k[i]道题。做出第i个难度级别的任意一题都需要a[i]分钟,并获得b[i]点积分。我最多可以刷T分钟水题,问我最多能获得多少积分?
【输入】
第一行两个正整数N和T,接下来的N行每行三个正整数数a[i]、b[i]、k[i]。
【输出】
一个数,表示我最多可以获得的积分。
【样例输入】
2 30
3 50 5
5 100 3
【样例输出】
40
题解:
和刷水题(二)差不多,代码在此↓↓↓
1 #include<iostream> 2 using namespace std; 3 int dp[1005]; 4 int a[1005],b[1005],num[1005]; 5 int n,t; 6 int main() 7 { 8 cin>>n>>t; 9 int i,j,k; 10 for(i=1;i<=n;i++) 11 cin>>a[i]>>b[i]>>num[i]; 12 int ans=-1; 13 for(i=1;i<=n;i++) 14 for(j=1;j<=num[i];j++) 15 for(k=t;k>=a[i];k--) 16 { 17 dp[k]=max(dp[k],dp[k-a[i]]+b[i]); 18 if(dp[k]>ans) 19 ans=dp[k]; 20 } 21 cout<<ans; 22 return 0; 23 }
这道题还可以把所有题目依次列出来,再用刷水题(一)的方法求解。但是,我就不告诉你代码,因为太(wo)简(mei)单(xie)了。你可以试一试。