题目:
同学说这个题需要以价格和需要钱数的差值排序,我没有那样做,虽然过了,但是我觉得我这样做有问题。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
int a;
int b;
int c;
} ;
bool cmp(node a,node b)
{
if(a.b!=b.b) return a.b>b.b;
return a.a<b.a;
}
bool cmp2(node a,node b)
{
if(a.b!=b.b) return a.b<b.b;
return a.a<b.a;
}
main()
{
int f[5010],f2[5010];
int i;
struct node p[5550];
int sum;
int n,V,v;
while(scanf("%d%d",&n,&V)!=EOF)
{
memset(f,0,sizeof(f));
memset(f2,0,sizeof(f2));
for(i=0;i<n;i++)
{
scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);
}
sort(p,p+n,cmp);
for(i=0;i<n;i++)
{
for(v=V;v>=p[i].b;v--)
{
if(f[v]<f[v-p[i].a]+p[i].c)
f[v]=f[v-p[i].a]+p[i].c;
}
}
sort(p,p+n,cmp2);
for(i=0;i<n;i++)
{
for(v=V;v>=p[i].b;v--)
{
if(f2[v]<f2[v-p[i].a]+p[i].c)
f2[v]=f2[v-p[i].a]+p[i].c;
}
}
if(f[V]>f2[V])
sum=f[V];
else
sum=f2[V];
printf("%d\n",sum);
}
}