Cod sursa(job #3230129)

Utilizator 0021592Grecu rares 0021592 Data 19 mai 2024 12:29:22
Problema Energii Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
using namespace std;
ifstream in("energii.in");
ofstream out("energii.out");
int dp[2][20010], i, j, n, w;
pair<int, int> a;
int s;
int main()
{
	in >> n >> w;
	for (i = 0; i < 20001; i++)
		dp[0][i] = dp[1][i] = 10001000;
	for (i = 1; i <= n; i++)
	{
		in >> a.first >> a.second;
		if (a.first == 0)
			continue;
		for (j = 1; j <= w*2; j++)
		{
			if (dp[i % 2][j] == 10001000)
				continue;
			if (j >= a.first)
				dp[i % 2][j] = min(dp[i % 2][j], dp[(i - 1) % 2][j - a.first] + a.second);
		}
		dp[i%2][a.first] = min(dp[i%2][a.first], a.second);
		dp[(i-1) % 2][a.first] = min(dp[(i-1) % 2][a.first], a.second);
	}
	i--;
	int ans = 10001000;
	for (j = w; j <= w * 2; j++)
		ans = min(ans, dp[i % 2][j]);
	if (ans == 10001000)
		out << -1;
	else
		out << ans;
	return 0;
}