Cod sursa(job #21578)

Utilizator stef2nStefan Istrate stef2n Data 23 februarie 2007 21:15:53
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>

#define infile "energii.in"
#define outfile "energii.out"
#define NMAX 1005
#define COSTMAX 15005
#define INF 1000000000

FILE *fin,*fout;
int n,w;
int energie[NMAX],cost[NMAX];
int cmin[COSTMAX];

void citire()
  {
   int i;
   fin=fopen(infile,"r");
   fscanf(fin,"%d %d",&n,&w);
   for(i=0;i<n;i++)
      fscanf(fin,"%d %d",&energie[i],&cost[i]);
   fclose(fin);
  }

void solve()
  {
   int i,j;
   for(i=1;i<=w+10000;i++)
      cmin[i]=-1;
   cmin[0]=0;
   for(j=0;j<n;j++)
      for(i=w;i>=0;i--)
         if(cmin[i]!=-1 && (cmin[i+energie[j]]==-1 || cmin[i+energie[j]] > cmin[i]+cost[j]))
           cmin[i+energie[j]] = cmin[i]+cost[j];
  }

void solution()
  {
   int i,min=INF;
   for(i=w;i<=w+10000;i++)
      if(cmin[i]!=-1 && min>cmin[i])
        min=cmin[i];
   fout=fopen(outfile,"w");
   if(min==INF)
     fprintf(fout,"-1\n");
   else
     fprintf(fout,"%d\n",min);
   fclose(fout);
  }


int main()
{
citire();
solve();
solution();
return 0;
}