Pagini recente » Cod sursa (job #1988163) | Cod sursa (job #2716260) | Cod sursa (job #3232780) | Cod sursa (job #323408) | Cod sursa (job #2966987)
#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, maxi;
int G[GMAX], W[GMAX];
int dp[GMAX][WMAX];
inline void debug()
{
for(int i = 1; i <= g; ++ i)
{
for(int j = 1; j <= max(maxi,w); ++ j)
{
cout << dp[i][j] << ' ';
}
cout << '\n';
}
cout << '\n';
}
/// SOLUTION (I HOPE)
inline void solution()
{
for(int i = 0; i <= g+5; ++ i)
{
for(int j = 0; j <= max(maxi, w) + 5; ++ 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 = max(maxi, w); j >= 1; -- j)
{
//cout << dp[i][j] << ' ';
if(j - G[i] >= 1 && (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], dp[i][j+1]});
}
else
{
dp[i][j] = min({dp[i-1][j], dp[i][j], dp[i][j+1]});
}
}
//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];
maxi = max(G[i], maxi);
}
solution();
}