Cod sursa(job #1491171)

Utilizator cristina_borzaCristina Borza cristina_borza Data 24 septembrie 2015 21:28:59
Problema Problema rucsacului Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <bitset>

using namespace std;

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

int gmax , n , g[5001] , c[5001] ,cmax[5001] , maxx;
bitset<1001> viz[5001];

void rucsac()
{
    int maxi , pmax;
    for(int i = 1 ; i <= gmax ; ++i) {
        maxi = 0;
        for(int j = 1 ; j <= n ; ++j) {
            if((g[j] <= i && viz[i - g[j]][j] == 0 && cmax[i - g[j]] > 0) || g[j]==i)
                if(c[j] + cmax[i - g[j]] > maxi) {
                    maxi = c[j] + cmax[i - g[j]];
                    pmax = j;
                }
        }
        if(maxi > 0) {
            for(int j = 1 ; j <= n ; ++j)
                viz[i][j] = viz[i - g[pmax]][j];
            viz[i][pmax] = 1;
            cmax[i] = maxi;
        }
    }
}
int main()
{
    fi >> n >> gmax;
    for(int i = 1 ; i <= n ; ++i)
        fi >> g[i] >> c[i];

    rucsac();

    for(int i = 1 ; i <= gmax ; ++i){
        maxx = max(cmax[i] , maxx);
    }

    fo << maxx;
    return 0;
}