不管如何,我又去刷水题了。这些题分为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)了。你可以试一试。