Pagini recente » Cod sursa (job #1161535) | Cod sursa (job #2467296) | Cod sursa (job #2945132) | Cod sursa (job #1182318) | Cod sursa (job #880524)
Cod sursa(job #880524)
#include <iostream>
#include <fstream>
using namespace std;
#define Nmax 10000002
unsigned long long G, W, S;
int E[Nmax], C[Nmax], cost[Nmax];
bool format[Nmax];
unsigned long long minim = Nmax;
void citire(){
ifstream f("energii.in");
f >> G >> W;
for(int i = 1; i <= G; i++)
f >> E[i] >> C[i],
S += E[i];
f.close();
}
void dinamica(){
unsigned long long maxim = 0;
format[0] = 1;
for(int i = 1; i <= G; i++){
for(int j = maxim; j >= 0; j--)
if(format[j]){
format[j+E[i]] = 1;
if(cost[j] + C[i] < cost[j+E[i]] || cost[j+E[i]] == 0)
cost[j+E[i]] = cost[j] + C[i];
if(j+E[i] >= W && cost[j+E[i]] < minim)
minim = cost[j+E[i]];
}
if(cost[maxim] + C[i] <= minim)
maxim += E[i];
}
}
void afis(){
ofstream g("energii.out");
if(W > S)
g << -1 << "\n";
else{
dinamica();
g << (minim == Nmax ? -1 : minim) << "\n";
}
}
int main(){
citire();
afis();
return 0;
}