Cod sursa(job #1039865)

Utilizator sziliMandici Szilard szili Data 23 noiembrie 2013 17:54:23
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

#define MAX_WEIGHT 10001
#define MAX_N 5001

using namespace std;

typedef struct object{
    int weight;
    int profit;
} OBJECT;


int prev[MAX_WEIGHT];
int current[MAX_WEIGHT];
OBJECT objects[MAX_N];

int main()
{
    freopen("rucsac.in", "r", stdin);
    freopen("rucsac.out", "w", stdout);

    int n,g;

    scanf("%d %d", &n, &g);

    for (int i=0; i<n; i++){
        OBJECT o;
        scanf("%d %d", &o.weight, &o.profit);
        objects[i] = o;
    }

    //solve
    for (int i=0; i<n; i++){
        OBJECT currentObject = objects[i];

        for (int j=currentObject.weight; j<=g; j++){
            if (prev[j] > prev[j-currentObject.weight] + currentObject.profit){
                current[j] = prev[j];
            } else {
                current[j] = prev[j-currentObject.weight] + currentObject.profit;
            }
        }

        for (int j=0; j<=g; j++){
            prev[j] = current[j];
        }
    }

    printf("%d", current[g]);

    return 0;
}