Cod sursa(job #2612240)

Utilizator matthriscuMatt . matthriscu Data 8 mai 2020 17:42:39
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#define max(a, b) ((a > b) ? a : b)

struct Item {
    int profit, weight;
};

int n, Wmax, i, w, dp[2][10001] {};
Item v[5001];

int main() {
    freopen("rucsac.in", "r", stdin);
    freopen("rucsac.out", "w", stdout);
    scanf("%d%d", &n, &Wmax);
    for(i = 1; i <= n; ++i)
        scanf("%d%d", &v[i].weight, &v[i].profit);
    
    for(i = 1; i <= n; ++i)
        if(i % 2 == 0)
            for(w = v[i].weight; w <= Wmax; ++w)
                if(v[i].weight <= w)
                    dp[0][w] = max(dp[1][w], dp[1][w-v[i].weight] + v[i].profit);
                else
                    dp[0][w] = dp[1][w];
        else
            for(w = v[i].weight; w <= Wmax; ++w)
                if(v[i].weight <= w)
                    dp[1][w] = max(dp[0][w], dp[0][w-v[i].weight] + v[i].profit);
                else
                    dp[1][w] = dp[0][w];  

    printf("%d ", dp[(i-1) % 2][w-1]);
}