83.(01背包)CYD刷题

3130 CYD刷题

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond
题目描述 Description

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

输入描述 Input Description

Q

Ai Bi Ci

输出描述 Output Description

可得最多积分

样例输入 Sample Input

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

分类标签 Tags 点此展开 

代码:
#include
using namespace std;
#include
#include
const int INFn=51,INFm=501;//n ti m shi jian
int f[INFn][INFm],tim[INFn],jf[INFn],n,m,q;
void input()
{
scanf("%d%d%d",&n,&m,&q);
int t=0,a,b,c;
for(int i=1;i<=n;++i)
{
scanf("%d%d%d",&a,&b,&c);//jf ,tim ,q
if(c<=q)
{
++t;
jf[t]=a;
tim[t]=b;
}
}
n=t;
}
int main()
{
input();
for(int i=1;i<=n;++i)//ti
 for(int j=m;j>=1;--j)//time
 {
  if(j>=tim[i]) f[i][j]=max(f[i-1][j],f[i-1][j-tim[i]]+jf[i]);
  else f[i][j]=f[i-1][j];
 }
 printf("%d ",f[n][m]);
return 0;
}
原文地址:https://www.cnblogs.com/c1299401227/p/5370736.html