Pagini recente » Cod sursa (job #556025) | Cod sursa (job #643957) | Cod sursa (job #1690680) | Cod sursa (job #2283879) | Cod sursa (job #999919)
Cod sursa(job #999919)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
const int INF = 0x3f3f3f3f;
int N, W;
int best[10001 + 5002], sol;
int energie[1001], cost[1001];
int main()
{
fin >> N >> W;
for (int i = 1; i <= N; ++i)
fin >> energie[i] >> cost[i];
int maxim = 0;
memset(best, -1, sizeof(best));
sol = INF;
best[0] = 0;
for (int i = 1; i <= N; ++i)
for (int gr = maxim; gr >= 0; --gr)
{
if (best[gr] != -1 && (best[gr + energie[i]] > best[gr] + cost[i] || best[gr + energie[i]] == -1))
{
best[gr + energie[i]] = best[gr] + cost[i];
if (gr + energie[i] > maxim && gr + energie[i] < W)
maxim = gr + energie[i];
if (gr + energie[i] >= W && best[gr] + cost[i] < sol)
sol = best[gr] + cost[i];
}
}
fout << sol;
fin.close();
fout.close();
return 0;
}