Cod sursa(job #1226076)

Utilizator BLz0rDospra Cristian BLz0r Data 4 septembrie 2014 15:45:59
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

#define inf 2000000000

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

struct date{
	int energy,cost;
}v[1005];

int D[2][20005]; //costul minim pentru a obtine j energie folosing surse din primele i

int main(){
	int n,S,s=0,sol=inf;
	
	fscanf (f,"%d%d",&n,&S);
	for (int i=1;i<=n;++i){
		fscanf (f,"%d%d",&v[i].energy,&v[i].cost);
		s+=v[i].energy;
	}
	
	if (s<S){
		fprintf (g,"%d",-1);
		return 0;
	}
	
	memset (D,999999,sizeof(D));
	
	int l=0;
	
	for (int i=1;i<=n;++i,l=1-l){
		D[1-l][0]=0;
		for (int j=1;j<=2*S;++j){
			D[l][j]=D[1-l][j];
			if (j>=v[i].energy){
				D[l][j]=min(D[l][j],D[1-l][j-v[i].energy]+v[i].cost);
				if (j>=S && sol>D[l][j]) sol=D[l][j];
			}
		}
	}
	
	fprintf (g,"%d",sol);
	
	return 0;	
}