Cod sursa(job #1244387)

Utilizator Andreid91Ciocan Andrei Andreid91 Data 17 octombrie 2014 11:06:34
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>

using namespace std;

#define maxn 100000

int n, din[maxn], g[maxn], p[maxn], gmax;

int solve() {
    din[0] = 1;
    int last = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = last; j >= 0 ; j--) {
            if (din[j] > 0) {
                if ( j + g[i] <= gmax) {
                    din[j + g[i]] = max(din[j + g[i]], din[j] + p[i]);
                    last = max(last, j + g[i]);
                }
            }
        }
    }
    int sol = 0;
    for (int i = 1; i <= last; i ++) {
        sol = max(sol, din[i]);
    }
    return sol - 1;
}

void afisare(int sol) {
    ofstream g("rucsac.in");
    g << sol;
    g.close();
}

void citire() {
    ifstream f("rucsac.in");
    f >> n >> gmax;
    for (int i = 1; i <=n ;i++) {
        f >> g[i] >> p[i];
    }
    f.close();
}

int main()
{
    citire();
    afisare(solve());
    return 0;
}