Cod sursa(job #2502033)

Utilizator 1chiriacOctavian Neculau 1chiriac Data 30 noiembrie 2019 12:42:10
Problema Energii Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
int n,emin,energie[1005],cost[1005],dp[10003],suma,minim;
int main () {
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	scanf("%d%d", &n, &emin);
	for(int i=1;i<=n;++i)
		scanf("%d%d", &energie[i], &cost[i]),suma+=energie[i];
	if(suma<emin) {
		printf("-1");
		return 0;
	}
	for(int i=1;i<=n;++i) {
		if(dp[energie[i]]==0)
			dp[energie[i]]=cost[i];
		else
			dp[energie[i]]=min(dp[energie[i]],cost[i]);
		for(int j=10001;j-energie[i]>=0;--j)
			if(dp[j-energie[i]]!=0) {
				if(dp[j]!=0)
					dp[j]=min(dp[j-energie[i]]+cost[i],dp[j]);
				else
					dp[j]=dp[j-energie[i]]+cost[i];
			}
	}
	minim=1e9;
	for(int i=emin;i<=10001;++i)
		if(dp[i]!=0)
			minim=min(minim,dp[i]);
	printf("%d", minim);
	return 0;
}
//de la dreapta ;la stanga;