Pagini recente » Cod sursa (job #2817844) | Cod sursa (job #2078743) | Cod sursa (job #1956579) | Cod sursa (job #2893272) | Cod sursa (job #1223976)
// Craciun Catalin
// Energii
// Infoarena
#include <iostream>
#include <cstring>
#include <climits>
#include <fstream>
struct obj {
int val, weight;
};
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");
#define GMax 500005
#define INF 0x3f3f3f3
#define min(a,b) ((a<b)?(a):(b))
int E[GMax];
int C[GMax];
int A[GMax];
int n,necessaryE;
long long sum=0;
long long minim = 0;
void knapstack() {
for (int i=1;i<=GMax-1;i++) {
A[i] = INF;
}
for (int i=1;i<=n;i++) {
for (int j=necessaryE; j>= 0;j--) {
if (A[j] != INF) {
if (A[j] + C[i] < A[j+E[i]])
A[j+E[i]] = A[j] + C[i];
}
}
}
minim = INF;
for (long long i=necessaryE; i<= sum;i++)
minim = min(minim, A[i]);
}
int main() {
f>>n>>necessaryE;
for (int i=1;i<=n;i++) {
f>>E[i]>>C[i];
sum+=E[i];
}
f.close();
if (sum < necessaryE)
g<<-1<<'\n';
else {
knapstack();
g<<minim<<'\n';
}
g.close();
return 0;
}