wikioi 3130 CYD刷题(背包)
题目描述 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
数据范围及提示 Data Size & Hint
【样例解释】
选第1题和第2题
【数据范围】
对于33%的数据 N≤20 M≤100 Q≤20
对于100%的数据 N≤50 M≤500 Q≤100 AiBiCi≤300
View Code1 #include<iostream> 2 #include<string.h> 3 #include<stdio.h> 4 #include<ctype.h> 5 #include<algorithm> 6 #include<stack> 7 #include<queue> 8 #include<set> 9 #include<math.h> 10 #include<vector> 11 #include<map> 12 #include<deque> 13 #include<list> 14 using namespace std; 15 int f[10000],a[10000],b[100000],c[100000]; 16 int main() 17 { 18 int n,m,q; 19 cin>>n>>m>>q; 20 for(int i=0;i<n;i++) 21 { 22 cin>>a[i]>>b[i]>>c[i]; 23 if(c[i]>q) 24 { 25 a[i]=0; 26 b[i]=0; 27 } 28 } 29 for(int i=0;i<n;i++) 30 { 31 for(int j=m;j>b[i];j--) 32 { 33 f[j]=max(f[j],f[j-b[i]]+a[i]); 34 } 35 } 36 cout<<f[m]; 37 return 0; 38 }