Cod sursa(job #132080)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 4 februarie 2008 23:40:10
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
//energii
#include<stdio.h>
FILE*fin=fopen("energii.in","r");
FILE*fout=fopen("energii.out","w");
#define maxn 1001
#define inf 200000000
#define min(a,b)((a)<(b)?(a):(b))
int main()
{
  int w,en[maxn],cost[maxn],cmin[2][5001],old,nw,i,n,j;
  fscanf(fin,"%d",&n);
  fscanf(fin,"%d",&w);
  for(i=1;i<=n;i++)
    fscanf(fin,"%d%d",&en[i],&cost[i]);
  fclose(fin);
  for(i=1;i<=w;i++)
    cmin[0][i]=inf;
  cmin[0][0]=0;
  for(i=1;i<=n;i++)
  {
    nw=i%2;old=!nw;
    for(j=0;j<=w;j++)
    {
      cmin[nw][j]=inf; 
      if(j-en[i]>=0) cmin[nw][j]=min(cmin[old][j-en[i]]+cost[i],cmin[old][j]);
      else cmin[nw][j]=cmin[old][j];
    }
  }
  if(cmin[nw][w]==inf) cmin[nw][w]=-1;
  fprintf(fout,"%d",cmin[nw][w]);
  fclose(fout);
  return 0;
}