Pagini recente » Cod sursa (job #2029860) | Cod sursa (job #2069901) | Cod sursa (job #2240416) | Cod sursa (job #1084225) | Cod sursa (job #880500)
Cod sursa(job #880500)
#include <iostream>
#include <fstream>
using namespace std;
#define Nmax 1000002
int G, W;
int E[Nmax], C[Nmax], cost[Nmax];
bool format[Nmax];
void citire(){
ifstream f("energii.in");
f >> G >> W;
for(int i = 1; i <= G; i++)
f >> E[i] >> C[i];
f.close();
}
void dinamica(){
int 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];
}
maxim += E[i];
}
}
void afis(){
ofstream g("energii.out");
int maxim = Nmax*Nmax;
for(int i = W; i <= Nmax; i++)
if(format[i])
maxim = min(maxim, cost[i]);
g << (maxim == Nmax ? -1 : maxim) << "\n";
}
int main(){
citire();
dinamica();
afis();
return 0;
}