Cod sursa(job #562720)

Utilizator andreipasalauPasalau Andrei andreipasalau Data 23 martie 2011 19:17:59
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<fstream.h>
#include<iostream.h>
ifstream f("energii.in");
ofstream g("energii.out");
int sol[200],s=0,min,min1;int i,nr,w,e[200],c[200];
int valid(int k)
{
	int i;
	for(i=1;i<k;i++)
	{
		if(sol[i]==sol[k]) return 0;
	}
	return 1;
}
int back(int k,int cost,int p)
{
	
	if(p==w)
	{
		if(cost<min) min=cost;
		cout<<"1";
    }
	else{
	     sol[k]=0;
		while((p<w)&&(sol[k]<=nr))
		{ 
			
			sol[k]++;
			if(valid(k)){
				
			p=p+e[sol[k]];
			cost+=c[sol[k]];
		    back(k+1,cost,p);
				p=p-e[sol[k]];
			cost-=c[sol[k]];
			}
			
		}
}}
main()
{
	
	f>>nr;
	f>>w;
	int ok=1;
	for(i=1;i<=nr;i++)
	{
		f>>e[i];
		f>>c[i];
		s+=e[i];
		if(e[i]==w) {ok=0;min1=c[i];}
		min+=c[i];
	}
	if(s<w) g<<"-1";
	if(ok==0) {
		for(i=1;i<=nr;i++)
			if((e[i]==w)&&(c[i]<min1))min1=c[i]; 
		g<<min1;
	}
	else
		{
			back(1,0,0);
	    g<<min;}
}