Cod sursa(job #419906)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 18 martie 2010 10:19:39
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
//Se da o suma S si n numere naturale. S<=10000
//Sa se scrie s folosind numerele date, pe fiecare cel mult o data
#include <stdio.h>
#define INF 1<<30

int E[1002];
int C[1002];
int W,N;

int v[10001];
int i,j,pmax;

int func(int x) {
	if (x>W)
		return W;
	return x;
}


int main(){
	FILE *f = fopen("energii.in","r");
	fscanf(f,"%d %d",&N,&W);
	for (i=1;i<=N;i++)
		fscanf(f,"%d %d",&E[i],&C[i]);

//	v[i] = costul minim de a obtine cantitate i de energie
	
	for (i=1;i<=W;i++)
		v[i] = INF;
	v[0] = 0;
	pmax = 0;
	for (i=1;i<=N;i++) {
		for (j=pmax;j>=0;j--)
			if (v[j]!=INF) {
				if (v[j]+C[i]<v[  func(j+E[i])  ])
					v[func(j+E[i])] = v[j]+C[i];
				if (func(j+E[i])>pmax)
					pmax = func(j+E[i]);
			}
	}
	
	FILE *g = fopen("energii.out","w");
	if(v[W] == INF)
		fprintf(g,"-1");
	else
		fprintf(g,"%d",v[W]);
	fclose(g);
	
	fclose(f);
	
	return 0;
}