Cod sursa(job #2324960)

Utilizator RK_05Ivancu Andreea Raluca RK_05 Data 21 ianuarie 2019 19:38:44
Problema Problema rucsacului Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 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[5005][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();
    for(int j = 1; j <= g; ++j){
        if(w[1] > j){
            d[1][j] = 0;
        }
        else{
            d[1][j] = p[1];
        }
    }
    for(int i = 2; i <= n; ++i)
        for(int j = 1; j <= g; ++j){
            if(j < w[i]){
                d[i][j] = d[i - 1][j];
            }
            else{
                d[i][j] = max(d[i - 1][j], p[i] + d[i - 1][j - w[i]]);
            }
    }
}

/*void afisare(){
    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= g; ++j)
            cout << d[i][j] << " ";
        cout << endl;
    }
}*/

int main(){

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