Cod sursa(job #1853460)

Utilizator ReksioCroftOctavian Florin Staicu ReksioCroft Data 21 ianuarie 2017 20:03:51
Problema Energii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#define nmax 5000
#define infinit 2000000000
int d[nmax];    ///d[i] vector de costuri, unde i e o putere

int maxi( int a, int b ){
    return ( a>=b ) ? a : b;
}

int mini( int a, int b ){
    return ( a<b ) ? a : b;
}

int main()
{
    int n, pmin, p, cost, i, j, costmin, last;
    FILE *fin, *fout;
    fin = fopen( "energii.in", "r" );
    fscanf( fin, "%d%d", &n, &pmin );
    costmin = infinit;
    last = 0;
    for( i=1; i<pmin; i++ )
        d[i] = infinit;
    for( i=0; i<n; i++ ){
        fscanf( fin, "%d%d", &p, &cost );
        for( j=last; j>=0; j-- ){
            if( j+p >=  pmin )
                costmin = mini( costmin, d[j] + cost );
            else{
                d[j+p] = mini( d[j+p], d[j] + cost );   ///daca noua
                last = maxi( last, j+p );   ///ultima pozitie actualizata
            }
        }
    }
    fclose( fin );
    fout = fopen( "energii.out", "w" );
    ( costmin < infinit ) ? fprintf( fout, "%d\n", costmin ) : fprintf( fout, "-1\n" );
    fclose( fout );
    return 0;
}