Cod sursa(job #1176080)

Utilizator hrazvanHarsan Razvan hrazvan Data 25 aprilie 2014 16:17:08
Problema Energii Scor 90
Compilator c Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <stdio.h>
#define G_MAX 1000
#define W_MAX 5000
long long e[ G_MAX ], c[ G_MAX ];
long long  rucs[ W_MAX ];

long long min ( long long a, long long b ){
    if ( a < b )    return a;
    return b;
}

long long trans ( long long a ){
    if ( a < 0 )    return 0;
    return a;
}

int main()
{
    FILE *in = fopen ( "energii.in", "r" );
    long long g, w;
    fscanf ( in, "%lld%lld", &g, &w );
    long long i;
    for ( i = 0; i < g; i++ ){
        fscanf ( in, "%lld%lld", &e[ i ], &c[ i ] );
    }
    fclose ( in );
    rucs[ 0 ] = 1;
    long long j;
    for ( i = 0; i < g; i++ ){
        for ( j = w; j > 0; j-- ){
            if ( rucs[ trans( j - e[ i ] ) ] != 0 ){
                if ( rucs[ j ] != 0 )   rucs[ j ] = min( c[ i ] +  rucs[ trans( j - e[ i ] ) ], rucs[ j ] );
                else  rucs[ j ] = c[ i ] +  rucs[ trans( j - e[ i ] ) ];
            }
        }
    }
    FILE *out = fopen ( "energii.out", "w" );
    if ( rucs[ w ] > 0 )     fprintf ( out, "%lld", rucs[ w ] - 1 );
    else  fprintf ( out, "-1" );
    fclose ( out );
    return 0;
}