Cod sursa(job #458924)

Utilizator LauraTudorTudor Laura LauraTudor Data 26 mai 2010 23:46:42
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
#include<stdlib.h>
int g,w,e[10001],c[10001];
int vector[50005001],vector2[50005001];
int main(){
	int i,j,aux;
	FILE *fin=fopen("energii.in","r");
	fscanf(fin,"%d",&g);
	fscanf(fin,"%d",&w);
	for(i=1;i<=g;i++)
		fscanf(fin,"%d %d",&e[i],&c[i]);
	/*for(i=1;i<=g;i++)
		printf("%d %d \n",e[i],c[i]);
*/
	//printf("w=%d",w);
	FILE *fout=fopen("energii.out","w");
	
	long min=500000000;
	int puse=1;
	vector[1]=e[1];
	vector2[1]=c[1];
	for(j=2;j<=g;j++){
		puse*=2;
		vector[puse]=e[j];
		vector2[puse]=c[j];
		if((vector[puse]>=w)&&(min>vector2[puse]))
		min=vector2[puse];
		for(i=1;i<puse;i++){
			vector[i+puse]=vector[puse]+vector[i];
			vector2[i+puse]=vector2[puse]+vector2[i];
			if((vector[i+puse]>=w)&&(min>vector2[i+puse]))
			min=vector2[i+puse];
		}
	}
	/*for(i=1;i<2*puse;i++)
		printf("%d %d \n",vector[i],vector2[i]);*/
	if(min!=500000000)
	fprintf(fout,"%d\n",min);
	else
		fprintf(fout,"-1\n");
	return 0;
}