Cod sursa(job #295596)

Utilizator drag0shSandulescu Dragos drag0sh Data 3 aprilie 2009 14:33:00
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <stdio.h>

#define oo 2000000

FILE *f=fopen("energii.in","r"),*g=fopen("energii.out","w");


int n,w,v[5001],rez;

int solve(){
  short int i,p,c,max,j;
  rez=oo;
  max=0;
  fscanf(f,"%d%d",&n,&w);
  for(i=1;i<=w;i++)v[i]=oo;
  for(i=1;i<=n;i++){
    fscanf(f,"%hd%hd",&p,&c);
    if(p>w){
      if(rez>c)rez=c;
      continue;
    }
    else{
      for(j=max;j>=0;j--){
	if(v[j]<oo){
	  if(j+p>w){
	    if(rez>v[j]+c)rez=v[j]+c;
	    continue;
	  }
	  v[j+p]=v[j+p]<v[j]+c?v[j+p]:v[j]+c;
	  max=max>j+p?max:j+p;
	}
	
      }
    }
    
  }
  rez=rez<v[w]?rez:v[w];
  if(rez==oo)return -1;
  return rez;
}



int main()
{
  int i;
  fprintf(g,"%d\n",solve());
  //  fprintf(g,"(%d)",w);
  //for(i=0;i<=w;i++)fprintf(g,"%d ",v[i]);
  fclose(f);
  fclose(g);
  return 0;
}