Pagini recente » Cod sursa (job #2609044) | Cod sursa (job #112135) | Cod sursa (job #1971963) | Cod sursa (job #784509) | Cod sursa (job #47450)
Cod sursa(job #47450)
// 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], Uz[WMAX][NMAX];
int main()
{
long suma = 0;
long cost = 0;
freopen( "energii.in", "rt", stdin );
scanf( "%d", &G );
scanf( "%d", &W );
long i;
for( i=1; i<=G; i++ )
{
scanf( "%d %d", &E[i], &C[i] );
suma += E[i];
cost += C[i];
}
fclose( stdin );
freopen( "energii.out", "wt", stdout );
if( suma < W )
{
printf( "-1\n" );
fclose( stdout );
return 0;
}
int S, k;
for( S=1; S<=W; S++ ) CMin[S] = MAXIM;
for( S=1; S<=W; S++ )
for( i=1; i<=G; i++ )
if( ( E[i]<=S ) && ( CMin[S-E[i]] != MAXIM ) && ( !Uz[S-E[i]][i] ) )
if( CMin[S] > C[i] + CMin[S-E[i]] )
{
CMin[S] = C[i] + CMin[S-E[i]];
for( k=1; k<=G; k++ ) Uz[S][k] = Uz[S-E[i]][k];
Uz[S][i] = 1;
}
printf( "%ld\n", CMin[W] );
fclose( stdout );
return 0;
}