Cod sursa(job #463267)
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *f,*g;
f=fopen("gutui.in","r");
g=fopen("gutui.out","w");
int n,i,j,s,k,h,u,*he,*c,*hmax,uz[1001][1001];
/*citirea datelor de intrare*/
fscanf(f,"%d%d%d",&n,&h,&u);
he=(int*)malloc((n+1)*sizeof(int));
c=(int*)malloc((n+1)*sizeof(int));
hmax=(int*)malloc((h+1)*sizeof(int));
for(i=1;i<=n;i++)
fscanf(f,"%d%d",&he[i],&c[i]);
for(i=1;i<=h;i++)
hmax[i]=-1;
/*algoritmul propriu-zis*/
for(s=1;s<=h;s++)
for(i=1;i<=n;i++)
if(he[i]<=s && hmax[s-he[i]]!=-1 && !uz[s-he[i]][i])
if(hmax[s]<c[i]+hmax[s-he[i]])
{
hmax[s]=c[i]+hmax[s-he[i]];
for(j=1;j<=n;j++)
he[j]+=u;
for(k=1;k<=n;k++)
uz[s][k]=uz[s-he[i]][k];
uz[s][i]=1;
}
fprintf(g,"%d\n",hmax[h]);
return 0;
}