Cod sursa(job #2502233)

Utilizator 1chiriacOctavian Neculau 1chiriac Data 30 noiembrie 2019 15:22:44
Problema Energii Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <cstring>
using namespace std;
long long n,emin,energie[1003],cost[1003],dp[5003],minim;
int main () {
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	scanf("%lld%lld", &n, &emin);
	for(int i=1;i<=n;++i)
		scanf("%lld%lld", &energie[i], &cost[i]);
	minim=4*1e18;
	for(int i=1;i<=n;++i) {
		if(energie[i]>=emin) {
			minim=min(minim,cost[i]);
			continue;
		}
		for(int j=emin-1;j>=0;--j)
			if(dp[j]!=0) {
				if(j+energie[i]>=emin)
					minim=min(minim,dp[j]+cost[i]);
				else {
					if(dp[j+energie[i]]!=0)
						dp[j+energie[i]]=min(dp[j]+cost[i],dp[j+energie[i]]);
					else
						dp[j+energie[i]]=dp[j]+cost[i];
				}
			}
		if(dp[energie[i]]==0)
			dp[energie[i]]=cost[i];
		else
			dp[energie[i]]=min(dp[energie[i]],cost[i]);
	}
	if(minim==4*1e18)
		printf("-1");
	else
		printf("%lld", minim);
	return 0;
}