Cod sursa(job #675068)

Utilizator CrescentselectJicol Crescent Crescentselect Data 7 februarie 2012 09:17:44
Problema Energii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<iostream>
#include <fstream>
#include<limits.h>
using namespace std;

int *w,*val,n;
bool *used;
int energie_minima;

bool fara_solutie = false;

int knapsack(int energie_produsa)
{
	if(fara_solutie) {
		return 0;
	}
	if(energie_produsa >= energie_minima) {
		return 0;
	}

	int min=50000;
	for(int i=0;i<n;i++)
	{
		if(!used[i])
		{
			used[i] = true;
			int valoare = w[i] + knapsack(energie_produsa+val[i]);
			if(min>valoare)
			{
				min=valoare;
			}
			used[i] = false;
		}
	}
	if(min == 50000) {
		fara_solutie = true;
	}
	return min;
}
int main()
{
	int i;
	ifstream f("energii.in");
	ofstream g("energii.out");
	f>>n;f>>energie_minima;
	
	w = new int [n];
	val = new int [n];
	used = new bool [n];
	for(i=0;i<n;i++)
	{
		f>>val[i];
		f>>w[i];
		used[i] = false;
	}
	int rez = knapsack(0);
	if(fara_solutie) {
		g << -1 << endl;
	} else {
		g << rez << endl;
	}
		
	f.close();
	g.close();
	return 0;
}