Cod sursa(job #1818561)

Utilizator danyvsDan Castan danyvs Data 29 noiembrie 2016 13:47:37
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <algorithm>
#include <cstring>

using namespace std;

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

const int NMAX = 5001;
const int GMAX = 10001;

int n, G;
pair < int, int > P[NMAX]; // greutate si castig
int A[GMAX], B[GMAX];

void read()
{
    int i;
    fin >> n >> G;
    for (i = 1; i <= n; ++ i)
        fin >> P[i].first >> P[i].second;
}

inline int max(int a, int b)
{
    return a > b ? a : b;
}

void dp()
{
    int i, j;
    for (i = 1; i <= n; ++ i)
        {
         for (j = 1; j <= G; ++ j)
            if (P[i].first > j)
                A[j] = B[j];
            else
                A[j] = max(B[j], B[j - P[i].first] + P[i].second);
         memcpy(B, A, sizeof(A));
        }
}

int main()
{
    read();
    fin.close();
    dp();
    fout << A[G] << "\n";
    fout.close();
    return 0;
}