Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1515079)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream in("energii.in");
ofstream out("energii.out");
const int maxn = 1005;
const int maxg = 5005;
const int inf = 0x3f3f3f3f;
int E[maxn];
int C[maxn];
int dp[maxn][maxg];
int main()
{
int n, W;
in >> n >> W;
for(int i = 1; i <= n; i++)
in >> E[i] >> C[i];
for(int i = 0 ; i <= n ; ++ i)
for(int j = 1 ; j <= W ; ++ j)
dp[i][j] = inf;
/// dp[i][0] = 0 V i
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= W; j++)
{
dp[i][j] = dp[i - 1][j];
if(j >= E[i])
dp[i][j] = min(dp[i][j], dp[i-1][j-E[i]] + C[i]);
}
}
if(dp[n][W] == inf) {
out << "-1\n";
return 0;
}
out << dp[n][W];
return 0;
}