Pagini recente » Cod sursa (job #2574236) | Cod sursa (job #1390450) | Cod sursa (job #2143985) | Cod sursa (job #73895) | Cod sursa (job #2966741)
#include <bits/stdc++.h>
using namespace std;
/// INPUT / OUTPUT
ifstream fin("energii.in");
ofstream fout("energii.out");
/// GLOBAL VARIABLES
const int GMAX = 1005, WMAX = 5005, INF = 1e9;
int g, w;
int G[GMAX], W[GMAX];
int dp[GMAX][WMAX];
inline void debug()
{
for(int i = 1; i <= g; ++ i)
{
for(int j = 1; j <= w; ++ j)
{
cout << dp[i][j] << ' ';
}
cout << '\n';
}
cout << '\n';
}
/// SOLUTION (I HOPE)
inline void solution()
{
for(int i = 0; i <= g; ++ i)
{
for(int j = 0; j <= w; ++ j)
{
dp[i][j] = INF;
}
}
for(int i = 1; i <= g; ++ i)
{
dp[i][G[i]] = min(dp[i-1][G[i]], W[i]);
for(int j = w; j >= 1; -- j)
{
//cout << dp[i][j] << ' ';
if(j - G[i] >= 0 && (dp[i-1][j]!=INF || dp[i-1][j-G[i]]!=INF))
{
//cout << "DA";
dp[i][j] = min(dp[i-1][j], dp[i-1][j-G[i]] + W[i]);
}
else
{
dp[i][j] = min(dp[i-1][j], dp[i][j]);
}
}
//cout << '\n';
}
debug();
if(dp[g][w] != INF)
fout << dp[g][w];
else
fout << -1;
}
/// READING THE INPUT
int main()
{
ios::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
fin >> g >> w;
for(int i = 1; i <= g; ++ i)
{
fin >> G[i] >> W[i];
}
solution();
}