Pagini recente » Cod sursa (job #2330098) | Cod sursa (job #277249) | Cod sursa (job #2782520) | Cod sursa (job #910742) | Cod sursa (job #930016)
Cod sursa(job #930016)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");
# define infinit 1<<30
# define nmax 1001
#define gmax 5005
int dp[nmax][gmax];
int i,n,j,Emax,energie[1005],cost[1005];
int main() {
f>>n>>Emax;
for(i=1; i<=n; i++)
f>>energie[i]>>cost[i];
//dp[i][j] = costul minim repornirii centralei utilizand o submultime
//dintre primele i generatoare astfel incat
// energia unei submultimi dintre primele i generatoare sa fie >=j
for(j=0;j<=Emax;j++) dp[0][j]=infinit;
dp[0][0]=0;
for(i=1; i<=n; i++)
for(j=0; j<=Emax; j++) {
dp[i][j] = dp[i-1][j];
if(energie[i]>j)dp[i][j]=min(dp[i][j],cost[i]); // daca energie obiectului meu e mai mare
//decat j atunci
if(energie[i]<=j) dp[i][j]=min(dp[i][j],dp[i-1][j-energie[i]]+cost[i]);
}
if(dp[n][Emax]==infinit) g<<-1;
else g<<dp[n][Emax];
return 0;
}