Pagini recente » Cod sursa (job #393004) | Cod sursa (job #1233400) | Cod sursa (job #2929571) | Cod sursa (job #2983272) | Cod sursa (job #130493)
Cod sursa(job #130493)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int inf = 1<<30;
int G(0),
W(0);
int e[1001],
c[1001];
int m[1001][5001];
#define MAX(a, b) ((a > b) ? (a) : (b))
int main(int argc, char *argv[]) {
ifstream fin("energii.in");
fin >> G >> W;
for (int i(1); i <= G; ++i) {
fin >> e[i] >> c[i];
}
fin.close();
for (int i(1); i <= W; ++i)
if (i <= e[1])
m[1][i] = c[1];
for (int i(1); i <= G; ++i)
for (int j(1); j <= W; ++j)
if (!m[i][j])
m[i][j] = inf;
for (int i(2); i <= G; ++i)
for (int j(1); j <= W; ++j)
if (j <= e[i]) {
if (m[i - 1][j] < c[i])
m[i][j] = m[i - 1][j];
else
m[i][j] = c[i];
} else {
if ((j - e[i] >= 1) && (m[i-1][j] > c[i] + m[i - 1][j - e[i]]))
m[i][j] = c[i] + m[i - 1][j - e[i]];
else
m[i][j] = m[i - 1][j];
}
/*for (int i(1); i <= G; ++i) {
for (int j(1); j <= W; ++j)
cout << m[i][j] << "\t";
cout << endl;
}*/
ofstream fout("energii.out");
if (m[G][W] == inf)
fout << -1 << endl;
else
fout << m[G][W] << endl;
fout.close();
return 0;
}