Cod sursa(job #2094206)

Utilizator brczBereczki Norbert Cristian brcz Data 25 decembrie 2017 12:33:09
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<bits/stdc++.h>

#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
#define sz size
#define pb push_back
#define mp make_pair
#define bg begin
#define nd end
using namespace std;


const int maxn = 10005;
const int inf = (1e9);

int n,w,suf;
vector<int> old(maxn);

void initOld(vector<int>& old) {
	for(int i=0;i<maxn;++i) old[i] = inf;
}

int main() {

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

	ios_base::sync_with_stdio(false);
	cin.tie(0);

	initOld(old);
	cin >> n;
	cin >> w;
	int x,y;
	for(int ni=0;ni<n;++ni) {
		cin >> x >> y;
		suf+=x;
		vector<int> curr(maxn);
		for(int i=0;i<x;++i) curr[i] = old[i];
		curr[x] = min(old[x],y);
		for(int i=x+1;i<maxn;++i) {
			curr[i] = min(old[i],old[i-x] + y);
		}
		old = curr;
	}
	if(suf < w) {
		cout << -1 << '\n';
		return 0;
	}
	int ans = inf;
	for(int i=w;i<maxn;++i) {
		ans = min(old[i],ans);
	}
	cout << ans << '\n';

	return 0;
}