Pagini recente » Cod sursa (job #2513288) | Cod sursa (job #1361001) | Cod sursa (job #2692665) | Cod sursa (job #1638443) | Cod sursa (job #2327243)
#include <fstream>
#include <cstring>
#define MAXN 1002
#define MAXM 5002
#define inf 0x3f3f3f3f
using namespace std;
//ifstream fin("rucsac.in");
//ofstream fout("rucsac.out");
ifstream fin("energii.in");
ofstream fout("energii.out");
struct two{
int val, g;
};
two obj[MAXN];
int N, G, dp[2][MAXM];
inline void Read(int &N, int &G) {
fin >> N >> G;
for (int i = 1; i <= N; i++) {
fin >> obj[i].g >> obj[i].val;
// fin >> obj[i].val >> obj[i].g;
}
}
inline void Dinamica(int N, int G) {
memset(dp, inf, sizeof(dp));
int la = 0, lc = 1;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= G; j++) {
if (obj[i].g >= j) {
dp[lc][j] = min(obj[i].val, dp[la][j]);
}
else
dp[lc][j] = min(dp[la][j], dp[la][j - obj[i].g] + obj[i].val);
}
la = 1 - la; lc = 1 - lc;
}
if (dp[la][G] == inf)
fout << -1;
else
fout << dp[la][G];
}
int main () {
int N, G;
Read(N, G);
Dinamica(N, G);
fin.close(); fout.close(); return 0;
}