Cod sursa(job #2312769)

Utilizator SirStevensIonut Morosan SirStevens Data 5 ianuarie 2019 14:55:34
Problema Problema rucsacului Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <algorithm>
#include <climits>
#include <vector>
#include <fstream>

using namespace std;

typedef pair <int, int> pereche;

ifstream in("rucsac.in");
ofstream out("rucsac.out");

vector<pereche> data;
int Gmax, DP[3][10001], n;

void read() {
    in >> n >> Gmax;
    int x, y;
    while(in >> x >> y){
        data.push_back({x, y});
    }
}

void print() {
    for(int i = 0; i <= 2; i++){
        for(int j = 0; j <= Gmax; j++){
            cout << DP[i][j] << " ";
        }
        cout << '\n';
    }
}

void solve(){

    for(int i = 1; i <= data.size(); i++){
        for(int j = 0; j <= Gmax; j++){
            if(j >= data[i-1].first)
                DP[2][j] = max(data[i-1].second + DP[1][j - data[i-1].first], DP[2][j]);
            DP[2][j] = max(DP[2][j], DP[1][j]);
        }
        for(int j = 0; j <= Gmax; j++){
            DP[1][j] = DP[2][j];
            DP[2][j] = 0;
        }
    }
    //print();
    out << DP[1][Gmax] << '\n';

}

int main() {
    read();
    solve();
    return 0;
}