Pagini recente » Cod sursa (job #2673355) | Cod sursa (job #3254802) | Cod sursa (job #494701) | Cod sursa (job #1643197) | Cod sursa (job #3196111)
#include <iostream>
#include <fstream>
#include <stdint.h>
#include <limits.h>
int64_t min(int64_t a, int64_t b) {
return (a < b) ? a : b;
}
const int64_t MAX_G = 1000;
const int64_t MAX_W = 5000;
const int64_t MAX_EG = 10000;
const int64_t MAX_CG = 10000;
const int64_t MAX_COST = MAX_EG * MAX_CG + 1;
int64_t mat[MAX_G][MAX_W];
int main() {
std::ifstream fin("energii.in");
std::ofstream fout("energii.out");
int64_t g, w;
fin >> g >> w;
for(int64_t i = 0; i != g; ++i)
for(int64_t j = 0; j <= w; ++j)
mat[i][j] = MAX_COST;
int64_t minSum = MAX_COST;
for(int64_t i = 0; i != g; ++i) {
int64_t eg, cg;
fin >> eg >> cg;
if(i) {
for(int64_t j = 0; j < w; ++j) {
if(mat[i - 1][j] != MAX_COST) {
mat[i][j] = min(mat[i][j], mat[i - 1][j]);
if(j + eg >= w) {
int64_t sum = mat[i - 1][j] + cg;
if(sum < minSum) {
minSum = sum;
}
} else {
mat[i][j + eg] = min(mat[i][j + eg], mat[i - 1][j] + cg);
}
}
}
}
if(eg >= w) {
int64_t sum = cg;
if(sum < minSum) {
minSum = sum;
}
} else {
mat[i][eg] = min(mat[i][eg], cg);
}
}
if(minSum == MAX_COST)
minSum = -1;
fout << minSum;
fin.close();
fout.close();
return 0;
}