讨论 / 最后两个点过不了...
keroro 2011-10-13 20:57:00
点我顶贴 收藏 删除
不知道为什么,最后两个点就是过不了。

#include<iostream>

#define MAX(a,b) a>b?a:b

#define p(a) printf("%d\n",a)

int n,money,kind,a[11][102],p[101],v[101],f[11][10001];

int main()

{int ans,i,j,k,x;

// freopen("1.txt","r",stdin);freopen("2.txt","w",stdout);

scanf("%d%d%d",&n,&money,&kind);

for(i=1;i<=n;i++){

scanf("%d%d%d",&x,&p[i],&v[i]);

if(p[i]<=money)a[x][++a[x][0]]=i;

}

memset(f,128,sizeof(f));

f[0][0]=0;

for(i=1;i<=kind;i++)

for(j=1;j<=a[i][0];j++){

x=a[i][j];

for(k=money;k>=p[x];k--){

if(f[i-1][k-p[x]]+v[x]>=0&&f[i-1][k-p[x]]+v[x]>f[i][k])f[i][k]=f[i-1][k-p[x]]+v[x];

if(f[i][k-p[x]]+v[x]>=0&&f[i][k-p[x]]+v[x]>f[i][k])f[i][k]=f[i][k-p[x]]+v[x];

}

}

for(ans=0,i=0;i<=money;i++)ans=MAX(ans,f[kind][i]);

ans==0?printf("Impossible"):printf("%d",ans);

return 0;

}

查看更多回复
提交回复