Pagini recente » Cod sursa (job #1007612) | Cod sursa (job #2072180) | Cod sursa (job #2565018) | Cod sursa (job #639891) | Cod sursa (job #1015467)
#include <fstream>
#define in "energii.in"
#define out "energii.out"
#define Max_Size 20004
int G, W, Energie_Totala, Sol = -1, Max_el;
int DP[Max_Size];
struct obj
{
int _e;
int _c;
} P[Max_Size / 2];
inline void Read_Data()
{
std :: ifstream f(in);
f >> G >> W;
for(int i = 1; i <= G; ++i)
{
f >> P[i]._e >> P[i]._c;
Energie_Totala += P[i]._e;
Max_el = std :: max(Max_el, P[i]._e);
}
}
inline void Solve()
{
if(Energie_Totala >= W)
{
#define oo 100000
Sol = oo;
for(int i = 1; i <= W + Max_el; ++i) DP[i] = oo;
for(int i = 1; i <= G; ++i)
for(int j = W; j >= 0; --j)
if(DP[j] != oo && DP[j + P[i]._e] > DP[j] + P[i]._c)
DP[j + P[i]._e] = DP[j] + P[i]._c;
for(int i = W; i <= W + Max_el; ++i) Sol = std :: min(Sol, DP[i]);
}
}
int main()
{
Read_Data();
Solve();
std :: ofstream g(out);
g << Sol << '\n';
g.close();
return 0;
}