Cod sursa(job #2699357)

Utilizator KlinashkaDiacicov Calin Marian Klinashka Data 24 ianuarie 2021 12:00:11
Problema Energii Scor 35
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
	
#include <algorithm>
	
using namespace std;
	
 
	
const int INF = (int) 1e9;
	
 
	
int main() {
	
	ifstream cin("energii.in");
	
	ofstream cout("energii.out");
	
	//dp[G+1][W+1] - costul minim pentru a genera o en. mai mare sau egala cu W folosind o submultime a primelor G elemente 
	
	int G, W;
	
	cin >> G >> W;
	
	int EG[G+1], CG[G+1];
	
	for(int i=1;i<=G;i++)
	
		cin >> EG[i] >> CG[i];
	
	int S=0;
	
	for(int i=1;i<=G;i++)
	
		S+=EG[i];
	
	if(S<W) {
	
		cout << -1;
	
		return 0;
	
	}
	
	int dp[G+1][S+1]; 
	
	dp[0][0] = 0; 
	
	for(int i=1;i<=S;i++)
	
		dp[0][i] = INF;
	
	for(int i=1;i<=G;i++) {
	
		dp[i][0] = 0;
	
		for(int j=1;j<=S;j++) {
	
			dp[i][j] = dp[i-1][j];
	
			if(j>=EG[i])
	
				dp[i][j] = min(dp[i-1][j], dp[i-1][j-EG[i]]+CG[i]);
	
		}	
	
	}
	
	int MN = dp[G][W];
	for(int i=W+1;i<=S;i++)
		MN=min(MN, dp[G][i]);

	cout << MN;
	
	return 0;
	
}