Cod sursa(job #465188)

Utilizator dornescuvladVlad Eugen Dornescu dornescuvlad Data 23 iunie 2010 16:27:15
Problema Energii Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream>
#include <fstream>
#define INF 23958198

using namespace std;

const char iname[] = "energii.in";
const char oname[] = "energii.out";
const int gmax = 1005;
const int emax = 5005;

ifstream fin(iname);
ofstream fout(oname);

int G, W, E[gmax], C[gmax], dp[gmax][emax], i, j ; 

int main()
{	
	
	fin >> G >> W;
	for(i = 1; i <= G; i ++)
		fin >> E[i] >> C[i];
	//dp[1][E[1]] = C[1];
	for(i = 1; i <= W; i ++)
		dp[0][i] = INF;
	for(i = 1; i <= G; i ++)
		for(j = 0; j <= W; j ++)
		{	
			//dp[i][E[i]] = C[i];
			if(dp[i - 1][j] != 0)
				dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - E[i]] + C[i]);
			else
				if(j - E[i] >= 0 && dp[i - 1][j - E[i]] != 0)
					dp[i][j] = dp[i - 1][j - E[i]] + C[i];
		}
	for(i = W - 1; i <= W + 50000; i ++)
		if(dp[G][i] != 0 && dp[G][i] != INF)
		{
			fout << dp[G][i];
			break;
		}
	if(dp[G][i] == 0)
		fout << "-1";
	return 0;
}