Mai intai trebuie sa te autentifici.
Cod sursa(job #588718)
Utilizator | Data | 9 mai 2011 10:44:00 | |
---|---|---|---|
Problema | Energii | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.76 kb |
#include <fstream>
using namespace std;
ifstream in ("energii.in");
ofstream out ("energii.out");
const int N = 1007;
const int INF = 1 << 30;
int n, cost[N * 15], e[N], c[N], w, s;
int main () {
in >> n >> w;
for (int i = 1; i <N*15; ++i) {
cost[i] = INF;
}
for (int i = 1; i <= n; ++i) {
in >> e[i] >> c[i];
s += e[i];
}
if (s < w) {
out << "-1\n";
return 0;
}
for (int i = 1; i <= n; ++i) {
for (int j = w - 1; j--; ) {
if (cost[j] != INF && cost[j] + c[i] < cost[j + e[i]]) {
cost[j + e[i]] = cost[j] + c[i];
}
}
if (c[i] < cost[e[i]]) {
cost[e[i]] = c[i];
}
}
int mmin = INF;
for (int i = w; i < N*15 ; ++i) {
if (cost[i] < mmin) {
mmin = cost[i];
}
}
out << mmin;
return 0;
}