Cod sursa(job #1091176)

Utilizator bondoralexandru bondor bondor Data 25 ianuarie 2014 12:49:44
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<cstdio>
#include<vector>
#include<algorithm>

using namespace std;

FILE *in = fopen("energii.in","r");
FILE *out = fopen("energii.out","w");

const int G = 1001;

struct generator{
    int energie;
    int cost;
};

generator gen[G];

const int W = 10001;

int matr[2][W];

int gnr, energNec;

int minim = 10001;

void input(){
    fscanf(in,"%d%d",&gnr,&energNec);
    for(int i = 1; i <= gnr; i++){
        fscanf(in,"%d%d",&gen[i].energie,&gen[i].cost);
        if(gen[i].energie < minim)
            minim = gen[i].energie;
    }
}

bool cmp(generator a, generator b){
    if(a.energie == b.energie)
        return (a.cost < b.cost);
    return (a.energie < b.energie);
}

int maxim(int a, int b){
    if(a > b)
        return a;
    return b;
}

void solve(){
    sort(gen + 1, gen + gnr + 1, cmp);
    for(int i = 1; i <= gnr; i++){
        for(int j = 1; j <= minim + energNec + 1; j++)
            matr[0][j] = matr[1][j];
        for(int j = 1; j <= minim + energNec + 1; j++){
            matr[1][j] = maxim(matr[0][j], matr[0][j - gen[i].energie] + gen[i].cost);
            if(matr[1][j] >= energNec){
                fprintf(out,"%d",matr[1][j]);
                exit(1);
            }
        }
    }
}

int main(){
    input();
    solve();
    return 0;
}