思路:
看大牛的解题报告,需要对q-p排序(从大到小);
注意:qsort()函数要用c++编译,用c会报错;
AC代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
int c;
int s;
int w;
}a[505];
int dp[5005];
int V;
int cmp(const void *a,const void *b)
{
struct node *x=(node *)a;
struct node *y=(node *)b;
return (x->s-x->c)>(y->s-y->c)?1:-1;
}
void ZeroOnePack(int c,int s,int w)
{
int v;
for(v=V;v>=s;v--)
if(dp[v]<dp[v-c]+w)
dp[v]=dp[v-c]+w;
}
int main()
{
int n;
int i;
while(scanf("%d%d",&n,&V)!=-1)
{
for(i=1;i<=n;i++)
scanf("%d%d%d",&a[i].c,&a[i].s,&a[i].w);
qsort(a+1,n,sizeof(a[1]),cmp);
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
ZeroOnePack(a[i].c,a[i].s,a[i].w);
printf("%d\n",dp[V]);
}
return 0;
}