Pagini recente » Cod sursa (job #852986) | Cod sursa (job #1077101) | Cod sursa (job #3205403) | Cod sursa (job #1389053) | Cod sursa (job #2368908)
#include <iostream>
#include <fstream>
#include <algorithm>
#define inf 0x3f3f3f3f
#define NMAX 1005
#define WMAX 5005
using namespace std;
ifstream fi("energii.in");
ofstream fo("energii.out");
int N, W;
pair<int, int> generators[NMAX];
int dp[NMAX][WMAX];
int energi[NMAX][WMAX];
int main()
{
fi >> N;
fi >> W;
int a, b;
for(int i = 1; i <= N; ++i)
{
fi >> a >> b;
generators[i] = {b, a};
}
sort(generators + 1, generators + 1 + N);
for(int i = 0; i <= N; ++i)
for(int j = 0; j <= W; ++j)
dp[i][j] = inf;
for(int i = 1; i <= N; ++i)
{
for(int j = 1; j <= W; ++j)
{
if(generators[i].first > dp[i-1][j])
dp[i][j] = dp[i-1][j];
if(j <= generators[i].second)
dp[i][j] = generators[i].first;
for(int k = 1; k <= j; ++k)
{
if(dp[i-1][k] != inf)
{
if(k + generators[i].second >= j)
{
dp[i][j] = min(dp[i][j], generators[i].first + dp[i-1][k]);
}
}
}
}
}
if(dp[N][W] == inf)
fo << -1;
else
fo << dp[N][W];
}