Cod sursa(job #2691234)

Utilizator walentines44Serban Valentin walentines44 Data 27 decembrie 2020 17:21:12
Problema Energii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;

int dp[1001][5001];
//ifstream fin("energii.in");
//ofstream fout("energii.out");

int main(){

	int N, W;
	cin >> N >> W;
	int energie[N + 1], cost[N + 1], max_cost = 0, max_energie = 0;
	energie[0] = 0;
	cost[0] = 0;
	for(int i = 1; i <= N; ++i){
		cin >> energie[i] >> cost[i];
		max_cost += cost[i];
		max_energie += energie[i];
	}
	if(max_energie < W){
		cout << "IMPOSIBIL" << "\n";
		return 0;
	}
	for(int i = 0; i <= N; ++i){
		for(int j = 0; j <= max_cost; ++j){
			if(i == 0 || j == 0){
				dp[i][j] = 0;
			}
			else if(cost[i] <= j){
				dp[i][j] = max(dp[i - 1][j], energie[i] + dp[i - 1][j - cost[i]]);
			}
			else{
				dp[i][j] = dp[i - 1][j];
			}
		}
	}
	int min_j = max_cost;
	for(int i = 0; i <= N; ++i){
		for(int j = 0; j <= max_cost; ++j){
			if((dp[i][j] >= W) && (j < min_j)){
				min_j = j;
			}
		}
	}
	cout << min_j << "\n";


	return 0;
}