Cod sursa(job #47460)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 3 aprilie 2007 18:52:05
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
// Problema energii
// Particularizare a problemei rucsac

#include <stdio.h>
#define NMAX        1001
#define WMAX        5001
#define MAXIM       100000

int G, W;
int E[NMAX], C[NMAX];
long CMin[WMAX][2];

int main()
{
    long suma = 0;
    long cost = 0, m = 0;
    freopen( "energii.in", "rt", stdin );
             scanf( "%d", &G );
             scanf( "%d", &W );
             long i, j;
             for( i=1; i<=G; i++ )
                  {
                       scanf( "%d %d", &E[i], &C[i] );                       
                       suma += E[i];
                       if( E[i] > m ) m = E[i];
                       cost += C[i];
                  }
    fclose( stdin );
        
    freopen( "energii.out", "wt", stdout );
             if( suma < W )
                 {
                      printf( "-1\n" );
                      fclose( stdout );
                      return 0;
                 }
             
             for( i=1; i<=G; i++ ) { CMin[i][0] = E[i]; CMin[i][1] = C[i]; }

             for( i=2; i<=G; i++ )
                  for( j=1; j<i; j++ )
                       if( ( CMin[i][1] > C[i] + CMin[j][1] ) && ( E[i]+CMin[j][0] < W ) )
                           {
                                        CMin[i][1] = C[i] + CMin[j][1];
                                        CMin[i][0] = E[i] + CMin[j][0];
                           }
             
             
             printf( "%ld\n", CMin[G][1] );
    fclose( stdout );
    return 0;
}