Cod sursa(job #55533)

Utilizator vicenzo_cnuStan Alexandru Dan vicenzo_cnu Data 27 aprilie 2007 18:50:10
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include<stdio.h>
#define maxg 1005
#define maxw 5005
int w,g,i;
long x[maxg],y[maxg],j,p[maxw];
long long a[maxw],s,min;
FILE *f,*d;
int main()
{f=fopen("energii.in","r");
d=fopen("energii.out","w");
fscanf(f,"%d %d",&g,&w);
min=maxw;
for(i=1;i<=g;i++)
{fscanf(f,"%ld %ld",&x[i],&y[i]);
s+=y[i];}
for(i=1;i<=w;i++)
a[i]=100005;
for(i=1;i<=g;i++)
{if(y[i]<a[x[i]])
{a[x[i]]=y[i];p[x[i]]=x[i];}
for(j=x[i];j<=w;j++)
{if(a[j]>y[i]+a[j-x[i]]&&p[j-x[i]]!=x[i])
{a[j]=y[i]+a[j-x[i]];p[j]=x[i];}
if(j>=w && a[j]<min)
min=a[j];}}
if(min!=10005)
fprintf(d,"%lld",min);
else fprintf(d,"-1");

fclose(f);
fclose(d);
return 0;}