3130 CYD刷题

来源:互联网 发布:linux批量解压zip 编辑:程序博客网 时间:2024/05/29 11:05
题目描述 Description

下午,CYD要刷题了,已知CYD有N题可刷,但他只有M分钟的时间,而且他的智慧值为Q,也就是说他只能做出难度小于等于Q的题目。已知每题可得积分Ai,需花费时间Bi,难度为Ci,问CYD最多可得多少积分。

输入描述 Input Description

N  M  Q

Ai Bi Ci

输出描述 Output Description

可得最多积分

样例输入 Sample Input

4  20  10

20 3 7

30 7 9

30 1 11

20 17 6

样例输出 Sample Output

50


和一般的0,1背包一样。这里多了一个“智商”,当智商不足时候,dp[i][j] = dp[i-1][j]。


#include <iostream>#include <vector>using namespace std;int M,N,Q;int a,b,c;int dp[51][501];   // N 到题,M分钟,Q智慧可以得到的最大分数。vector<int> va,vb,vc; // 得分,花费时间,难度int main(){cin >> N >> M >> Q;for (int i = 1; i <= N; i++){cin >> a >> b >> c;va.push_back(a);vb.push_back(b);vc.push_back(c);}for (int i = 1; i <= N; i++){for (int i1 = 0; i1 < vb[i-1]; i1++){dp[i][i1] = dp[i-1][i1];}for (int k = M; k >= vb[i-1]; k--){if(Q > vc[i-1]){dp[i][k] = max(dp[i-1][k],dp[i-1][k-vb[i-1]]+va[i-1]);}else{dp[i][k] = dp[i-1][k];}}}cout<<dp[N][M];return 0;}


0 0
原创粉丝点击