Pagini recente » Cod sursa (job #139133) | Cod sursa (job #134996) | Cod sursa (job #186363) | Cod sursa (job #320956) | Cod sursa (job #2768214)
// Energii.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
// Problema rucsacului varianta discreta
// dp[cw+E[i]] = min(dp[cw+E[i], dp[cw]+C[i])
#include <iostream>
#include <fstream>
#include <algorithm>
#pragma warning(disable: 4996)
#define INF 0x3F3F3F3F
#define MAXG 1006
#define MAXW 5006
using namespace std;
FILE* fin, * fout;
int G, W;
int E[MAXG], C[MAXG];
int dp[MAXW];
static inline void Read()
{
fscanf(fin, "%d %d", &G, &W);
for (int i = 1; i <= G; i++)
fscanf(fin, "%d %d", &E[i], &C[i]);
for (int i = 1; i <= W; i++)
dp[i] = INF;
}
static inline void KnapSack()
{
for (int i = 1; i <= G; i++)
{
for (int cw = W - E[i]; cw >= 0; cw--)
dp[cw + E[i]] = min(dp[cw + E[i]], dp[cw] + C[i]);
for (int cw = E[i] - 1; cw >= 1; cw--)
dp[cw] = min(dp[cw], C[i]);
}
dp[W] == INF ? fprintf(fout, "%d", -1) : fprintf(fout, "%d", dp[W]);
}
int main()
{
fin = fopen("energii.in", "r");
fout = fopen("energii.out", "w");
Read();
KnapSack();
fclose(fin);
fclose(fout);
return 0;
}