Cod sursa(job #327889)

Utilizator ZethpixZethpix Zethpix Data 30 iunie 2009 15:37:42
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
FILE *f,*g;
long n,w,i,j,max,a[1002],b[1002],maxn=10000002;
long c[10000002],d[10000002];
int main(){
 f=fopen("energii.in","r");
 g=fopen("energii.out","w");
 fscanf(f,"%ld",&n);
 fscanf(f,"%ld",&w);
 for(i=1;i<=n;i++)
  fscanf(f,"%ld%ld",&a[i],&b[i]);
 max=0;
 for (i=0;i<=maxn;i++){ c[i]=-1;d[i]=-1;}
 c[0]=0;d[0]=0;
 for (i=1;i<=n;i++)
  for (j=max;j>=0;j--)
   if (c[j]!=-1)
    if (c[j+a[i]]==-1){
     c[j+a[i]]=a[i];
     d[j+a[i]]=b[i]+d[j];
     if (max<j+a[i]) max=j+a[i];
    }
     else
      if (d[j+a[i]]>d[j]+b[i]){
       c[j+a[i]]=a[i];
       d[j+a[i]]=b[i]+d[j];
       if (max<j+a[i]) max=j+a[i];
      }
 long min=maxn;
 while (max>=w){
  if (d[max]!=-1&&d[max]<min) min=d[max];
  max--;
 }
 if (min==maxn) min=-1;
 fprintf(g,"%ld\n",min);
 fclose(f);
 fclose(g);
 return 0;
}