Pagini recente » Cod sursa (job #690841) | Cod sursa (job #2203897) | Cod sursa (job #2892876) | Cod sursa (job #2980353) | Cod sursa (job #1324020)
/*
Keep It Simple!
*/
#include <fstream>
#define minV(a,b) ((a)<(b)?(a):(b))
using namespace std;
const int kMax_N = 1005;
const int kMax_W = 5005;
const int kMax_S = 10055025;
int g, w,sum;
int eg[kMax_N], cg[kMax_N];
int dp[kMax_S];
void ReadData()
{
ifstream fin("energii.in");
fin >> g >> w;
for (int i = 1; i <= g; ++i)
{
fin >> eg[i] >> cg[i];
sum += eg[i];
}
fin.close();
}
void PrintResult(int x)
{
ofstream fout("energii.out");
fout << x;
fout.close();
}
void Solve()
{
ReadData();
if (sum < w) PrintResult(-1);
for (int i = 1; i <= sum; ++i) dp[i] = 1 << 28;
for (int i = 1; i <= g; ++i)
for (int j = w; j >= 0; --j)
{
if (j + eg[i] > w)
dp[w] = minV(dp[w], dp[j] + cg[i]);
else
dp[j + eg[i]] = minV(dp[j + eg[i]], dp[j] + cg[i]);
}
PrintResult(dp[w]);
}
int main()
{
Solve();
return 0;
}