Mai intai trebuie sa te autentifici.

Cod sursa(job #2121505)

Utilizator cristina2689Cristina Opriceana cristina2689 Data 3 februarie 2018 19:37:05
Problema Problema rucsacului Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

int main() {
    ifstream f1("rucsac.in");
    ofstream f2("rucsac.out");

    int N, G, w, p;
    f1 >> N >> G;

    vector<int> weight;
    vector<int> profit;
    vector<vector<int>> partial(G + 1, vector<int>(2, 0));

    for (int i = 0; i < N; i++) {
        f1 >> w >> p;
        weight.push_back(w);
        profit.push_back(p);
    }

    /*
    for (int i = 0; i < N; i++) {
        partial[weight[i]][i + 1] = profit[i];
    }
    */
    for (int j = 1; j <= N; j++) {
        // clear prev line in marix[G][2]
        for (int i = 1; i <= G; i++) {
            partial[i][0] = partial[i][1];
            partial[i][1] = 0;
        }
        // init profit
        partial[weight[j - 1]][1] = profit[j - 1];
        for (int i = 1; i <= G; i++) {
            partial[i][1] = max(partial[i][1] , partial[i][0]);
            if (i >= weight[j - 1]) {
                partial[i][1] = max(partial[i][1], profit[j - 1]);
                partial[i][1] = max(partial[i][1], profit[j - 1] + partial[i - weight[j - 1]][0]);
            }
        }
    }
    f2 << partial[G][1];
    f1.close();
    f2.close();
    return 0;
}