Cod sursa(job #695154)
| Utilizator | Data | 28 februarie 2012 10:49:48 | |
|---|---|---|---|
| Problema | Problema rucsacului | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.59 kb |
#include <cstdio>
#include <algorithm>
using namespace std ;
#define MAXN 5010
#define MAXG 10010
int n, g ;
int w[MAXN], p[MAXN] ;
int d[MAXN][MAXG] ;
int main () {
int i, cw ;
freopen ( "rucsac.in", "r", stdin ) ;
scanf ( "%d %d\n", &n, &g ) ;
for ( i=1; i<=n; ++i )
scanf ( "%d %d\n", &w[i], &p[i] ) ;
fclose ( stdin ) ;
for ( i=1; i<=n; ++i )
for ( cw=1; cw<=g; ++cw) {
d[i][cw] = d[i-i][cw] ;
if ( w[i] < cw )
d[i][cw] = max ( d[i][cw], d[i-1][cw-w[i]] + p[i] ) ;
}
freopen ( "rucsac.out", "w", stdout ) ;
printf ( "%d\n", d[n][g] ) ;
fclose ( stdout ) ;
return 0 ;
}