Cod sursa(job #2930118)

Utilizator andreipirjol5Andrei Pirjol andreipirjol5 Data 27 octombrie 2022 15:43:39
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <cstdio>
#include <iostream>

using namespace std;
FILE *fin, *fout;

const int NMAX = 5000;
int w[NMAX + 5], p[NMAX + 5];
int dp[2][10005];

int main()
{
    fin = fopen("rucsac.in", "r");
    fout = fopen("rucsac.out", "w");

    int n, g;
    fscanf(fin, "%d%d", &n, &g);

    for(int i = 1; i <= n; i++)
        fscanf(fin, "%d%d", &w[i], &p[i]);

    for(int i = 0; i <= g; i++)
        dp[0][g] = 0;

    int lin = 1;

    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= g; j++)
        {
            if(j < w[i])
            {
                dp[lin][j] = dp[1 - lin][j];
                continue;
            }

            dp[lin][j] = max(dp[1 - lin][j], dp[1 - lin][j - w[i]] + p[i]);
        }

        lin = 1 - lin;
    }

    fprintf(fout, "%d", dp[1 - lin][g]);

    fclose(fin);
    fclose(fout);
    return 0;
}