Pagini recente » Cod sursa (job #3276407) | Cod sursa (job #2586888) | Cod sursa (job #2220903) | Cod sursa (job #727598) | Cod sursa (job #2700061)
// Mihai Priboi
#include <bits/stdc++.h>
#define MAXN 5000
#define MAXG 10000
struct obiect {
int g, p;
} v[MAXN];
int rucsac[2][MAXG + 1];
int main() {
FILE *fin, *fout;
int n, g, i, j;
fin = fopen( "rucsac.in", "r" );
fscanf( fin, "%d%d", &n, &g );
for( i = 0; i < n; i++ )
fscanf( fin, "%d%d", &v[i].g, &v[i].p );
fclose( fin );
// pointers pentru usurinta la schimbarea liniilor
int *a, *b;
a = rucsac[1];
b = rucsac[0];
// problema rucsacului, pe fiecare pozitie profitul maxim pentru greutatea
// cel mult egala cu j, folosind primele i obiecte
for( i = 0; i < n; i++ ) {
for( j = 1; j <= g; j++ ) {
a[j] = b[j];
if( j - v[i].g >= 0 )
a[j] = std::max( a[j], b[j - v[i].g] + v[i].p );
}
std::swap(a, b);
}
fout = fopen( "rucsac.out", "w" );
fprintf( fout, "%d", b[g] );
fclose( fout );
return 0;
}