Cod sursa(job #2612074)

Utilizator ioana.jianuIoana Jianu ioana.jianu Data 8 mai 2020 14:28:07
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#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;
}