Cod sursa(job #2148700)

Utilizator marcudanfDaniel Marcu marcudanf Data 1 martie 2018 21:45:16
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int dp[1005][5005], s[1005];
int n, ct;
pair <int, int> v[1005];

int main(){
	fin >> n >> ct;
	for(int i = 1; i <= n; i++){
		fin >> v[i].first >> v[i].second;
		s[i] = s[i-1] + v[i].first;
	}
	if(ct > s[n]){
		fout << -1;
		return 0;
	}
	for(int i = 0; i <= n; i++)
		for(int j = 0; j <= ct; j++)
			dp[i][j] = 2e9;
	for(int i = 1; i <= v[1].first; i++)
		dp[1][i] = v[1].second;
	for(int i = 2; i <= n; i++){
		dp[i][1] = min(dp[i-1][1], v[i].second);
	}
	for(int i = 2; i <= n; i++){
		for(int j = 2; j <= ct; j++){
			if(j > s[i])
				break;
			if(v[i].first < j){
				dp[i][j] = min(dp[i-1][j], dp[i-1][j - v[i].first] + v[i].second);
			}else
				dp[i][j] = min(dp[i-1][j], v[i].second);
		}
	}
	fout << dp[n][ct];
	return 0;
}