Pagini recente » Cod sursa (job #2829966) | Cod sursa (job #379544) | Cod sursa (job #373371) | Cod sursa (job #1377301) | Cod sursa (job #1217961)
#include <fstream>
#include <iostream>
#define INF (1<<30)
using namespace std;
int N, W, dp[1000][5010], E[1010], C[1010];
/*
int solve(int item, int energy){
if (item==0 && energy>0)
return INF;
if (energy <=0)
return 0;
if (viz[item][energy])
return dp[item][energy];
viz[item][energy]=1;
int x=solve(item-1,energy);
int y=solve(item-1,energy-E[item])+C[item];
dp[item][energy]=min(x,y);
return dp[item][energy];
}
*/
int main(){
ifstream in("energii.in");
ofstream out("energii.out");
in >> N >> W;
int i,j,aux;
for (i=1; i<=N; i++)
in >> E[i] >> C[i];
for (i=1; i<=N; i++)
for (j=1; j<=W; j++)
dp[i][j]=INF;
for (i=1; i<=W; i++)
dp[0][i]=INF;
for (i=1; i<=N; i++){
for (j=0; j<=W; j++){
dp[i][j]=dp[i-1][j];
if (j-E[i]<0)
aux=0;
else
aux=j-E[i];
dp[i][j]=min(dp[i][j],dp[i-1][aux]+C[i]);
}
}
if (dp[N][W]==INF) dp[N][W]=-1;
out << dp[N][W];
return 0;
}