Cod sursa(job #770940)

Utilizator harababurelPuscas Sergiu harababurel Data 24 iulie 2012 13:27:19
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#define nmax 1005
#define gmax 5005
#define inf 999999999
using namespace std;


int dp[nmax][gmax];
int main() {
	ifstream f("energii.in");
	ofstream g("energii.out");
	
	int n, energiemin, profit[nmax], cost[nmax], i, j;
	
	f>>n>>energiemin;
	for(i=1; i<=n; i++) f>>profit[i]>>cost[i];
	
	for(j=0; j<=energiemin; j++) dp[0][j] = inf;
	dp[0][0]=0;
		
	
	for(i=1; i<=n; i++) {
		
		for(j=0; j<=energiemin; j++) {
			
			dp[i][j] = dp[i-1][j];										//presupunem ca nu pot obtine profitul j cu generatorul i
			
			if(profit[i]  >  j) dp[i][j] = min( dp[i][j], cost[i] );	//daca il pot obtine folosind doar generatorul i
			
			if(profit[i]  <= j) {										//daca il pot obtine, dar am nevoie si de alte generatoare
				dp[i][j] = min( dp[i][j], cost[i] + dp[i-1][j - profit[i]] );
			}
			
		}
	}
	
	/*for(i=1; i<=n; i++) {
		for(j=1; j<=energiemin; j++) {
			g<<dp[i][j]<<" ";
		}
		g<<"\n";
	}*/
	
	if(dp[n][energiemin]==inf) dp[n][energiemin] = -1;
	g<<dp[n][energiemin]<<"\n";
	
	f.close();
	g.close();
	return 0;
}