Cod sursa(job #2472346)

Utilizator borscalinCalin-Stefan Georgescu borscalin Data 12 octombrie 2019 11:42:37
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <fstream>
#define NMAX 1000
#define GMAX 15000
#define INF 1<<30

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

int N, P;

int energy[1 + NMAX];
int cost[1 + NMAX];
int dp[2][1 + GMAX];

int main() {

	//std::cin >> N >> P;
	fin >> N >> P;
	
	for ( int i = 1; i <= N; ++i )	
		//std::cin >> energy[i] >> cost[i];
		fin >> energy[i] >> cost[i];
	
	for ( int c = 0; c <= P; ++c ) {
		if ( energy[1] < c )
			dp[1][c] = INF;
		else
			dp[1][c] = cost[1];
	}

	for ( int i = 2; i <= N; ++i ) {
		for ( int c = 0; c <= P; ++c ) {
			int r = c - energy[i];
			int tmp = 0;
			if ( r > 0 )
				tmp = dp[(i - 1) % 2][r];
			dp[i % 2][c] = std::min(tmp + cost[i], dp[(i - 1) % 2][c]);
		}
	}

	int ans = dp[N%2][P];

	if ( ans == INF )
		//std::cout << -1;
		fout << -1;
	else
		//std::cout << ans;
		fout << ans;

	//std::cout << '\n';
	fout << '\n';
	
	return 0;
}