Cod sursa(job #3352965)

Utilizator xXoctavianXxStanescu Matei Octavian xXoctavianXx Data 3 mai 2026 00:14:01
Problema Energii Scor 0
Compilator cpp-64 Status done
Runda cerc-acs-02-05-26 Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("energii.in");
ofstream fout("energii.out");

// #define cin fin
// #define cout fout
#define int long long

#define inf INT_MAX

const int gmax = 1005; // generatorare
const int wmax = 15005; // energie

int e[gmax], c[gmax];

int dp[2][wmax];
int g, w;

int32_t main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	cin >> g >> w;

	for(int i = 1; i <= g; i ++) {
		cin >> e[i] >> c[i];
	}
	for(int i = 0; i < 2; i++) {
		for(int j = 0; j < wmax; j++) {
			dp[i][j] = inf;
		}
	}
	dp[0][0] = 0;
	dp[1][0] = 0;
	for(int i = 1; i <= g; i ++) {
		dp[i & 1][e[i]] = min(dp[!(i & 1)][e[i]], c[i]);
		for(int j = 0; j <= w; j++) {
			dp[i & 1][j + e[i]] = min(dp[!(i & 1)][j + e[i]], dp[!(i & 1)][j] + c[i]);
		}
	}

	int min_cost = inf;
	for(int j = w; j < wmax; j++) {
		min_cost = min(min_cost, dp[g & 1][j]);
	}
	cout << ((min_cost == inf) ? -1 : min_cost) << "\n";

	// for(int i = 1; i <= g; i ++) {
	// 	for(int j = 0; j <= w + 2; j++) {
	// 		cout << dp[i][j] << ' ';
	// 	}
	// 	cout << "\n";
	// }

	return 0;
}