Pagini recente » Cod sursa (job #1265965) | Cod sursa (job #2858657) | Cod sursa (job #3170278) | Cod sursa (job #858328) | Cod sursa (job #2612074)
#include <iostream>
#include <stdio.h>
using namespace std;
const int NMAX = 5000;
const int GMAX = 10000;
int w[NMAX + 1], p[NMAX + 1], dp[2][GMAX + 1], d[GMAX + 1];
int main() {
freopen ("rucsac.in", "r", stdin);
freopen ("rucsac.out", "w", stdout);
int n, g, i, j, pmax;
scanf("%d%d", &n, &g);
for (i = 1; i <= n; i++)
scanf ("%d%d", &w[i], &p[i]);
/*for (i = 1; i <= n; i++) {
for(j = 0; j <= g; j++) {
if(j < w[i])
dp[i%2][j] = dp[(i - 1)%2][j];
else
dp[i%2][j] = max(dp[(i - 1)%2][j], dp[(i - 1)%2][j - w[i]] + p[i]);
}
}
pmax = 0;
for (j = 0; j <= g; j++)
pmax = max(pmax, dp[n%2][j]);
printf ("%d", pmax);
*/
for (i = 1; i <= n; i++) {
for (j = g - w[i]; j >= 1; j--)
if (d[j] != 0)
d[j + w[i]] = max(d[j + w[i]], d[j] + p[i]);
d[w[i]] = max(d[w[i]], p[i]);
}
pmax = 0;
for (j = 0; j <= g; j++)
pmax = max(pmax, d[j]);
printf ("%d", pmax);
return 0;
}