Cod sursa(job #2326872)

Utilizator RK_05Ivancu Andreea Raluca RK_05 Data 24 ianuarie 2019 10:21:21
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <iostream>
#include <algorithm>

using namespace std;

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

int n, g, w[5005], p[5005], d[2][10005];

void citire(){
    fin >> n >> g;
    for(int i = 1; i <= n; ++i)
        fin >> w[i] >> p[i];
}

void bubble(){
    for(int i = 1; i <= n; ++i)
        for(int j = i + 1; j <= n; ++j){
            if(w[j] < w[i])
                swap(w[i], w[j]);
                swap(p[i], p[j]);
    }
}

void constructie(){
    bubble();
    int i, j;
    for(i = 1; i <= g; ++i){
        if(i < w[1])
            d[1][i] = 0;
        else
            d[1][i] = p[1];
    }
    for(i = 2; i <= n; ++i){
        for(j = 1; j <= g; ++j){
            if(j < w[i])
                d[2][j] = d[1][j];
            else
                d[2][j] = max(d[1][j], p[i] + d[1][j - w[i]]);
        }
        for(j = 1; j <= g; ++j)
            d[1][j] = d[2][j];
    }
}

int main(){

    citire();
    constructie();
    fout << d[2][g];
    fin.close();
    fout.close();
    return 0;
}