Cod sursa(job #2935336)

Utilizator matthriscuMatt . matthriscu Data 6 noiembrie 2022 15:50:27
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <bits/stdc++.h>
using namespace std;

#define GMAX 1005
#define WMAX 5005
#define INF 0x3f3f3f3f

struct {
	int e, c;
} v[GMAX];

int g, w, best = INF, dp[GMAX][WMAX];

int main() {
	freopen("energii.in", "r", stdin);
	freopen("energii.out", "w", stdout);

	int g, w;
	scanf("%d%d", &g, &w);

	for (int i = 1; i <= g; ++i)
		scanf("%d%d", &v[i].e, &v[i].c);

	memset(dp, 0x3f, sizeof(dp));

	dp[0][0] = 0;

	for (int i = 0; i <= g; ++i)
		for (int j = 0; j <= w; ++j) {
			dp[i + 1][j] = min(dp[i + 1][j], dp[i][j]);
			const int next_j = min(j + v[i].e, w);
			dp[i + 1][next_j] = min(dp[i + 1][next_j], dp[i][j] + v[i].c);
		}

	for (int i = 1; i <= g + 1; ++i)
		best = min(best, dp[i][w]);

	printf("%d\n", best == INF ? -1 : best);
}