Cod sursa(job #282242)

Utilizator n3msizN3msiz n3msiz Data 17 martie 2009 10:27:14
Problema Energii Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<stdio.h>
#define INF 10000002

int e[1002],c[1002],v[5002],i,n,w,sumc,p,j;


int min(int a, int b){
  return a<b?a:b;
}


int main(){
FILE *f = fopen ("energii.in","r");
FILE *g = fopen ("energii.out","w");
  fscanf(f,"%d%d",&n,&w);
  for(i=1;i<=n;i++){
	fscanf(f,"%d%d",&e[i],&c[i]);
	sumc+=c[i];
  }
  if(sumc<w) {
    fprintf(g,"%d",-1);

  }
  else{

    v[0]=0;
    for (i=1;i<=w;i++)
	 v[i] = INF;
    p=0;

    for(i=1;i<=n;i++)     //v[j] = costul minim de a obtine cant j de energie
	  for(j=p;j>=0;j--)
		if(v[j]!=INF)
			if (v[min(j+e[i],w)]>v[j]+c[i]) {
			  if (p<min(j+e[i],w))
			    p = min(j+e[i],w);
			  v[min(j+e[i],w)]=v[j]+c[i];
			}


    fprintf(g,"%d",v[w]);
  }
fclose(f);
fclose(g);
return 0;
}