Cod sursa(job #2536920)

Utilizator Ionut10Floristean Ioan Ionut10 Data 2 februarie 2020 20:05:55
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
#define DimMax 10005
#define Nmax 5005

using namespace std;

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

int n, gmax;
int vmax[DimMax];
bool uz[DimMax][Nmax];
int g[Nmax], v[Nmax];
int main()
{
    fin>>n>>gmax;
    for(int i = 1;i <= n;i++)
        fin>>g[i]>>v[i];
    for(int i = 1;i <= gmax;i++) vmax[i] = -1;
    for(int s = 1;s <= gmax;s++)
        for(int i = 1;i <= n;i++)
        {
            if(g[i] <= s && vmax[max(0, s - g[i])] != -1 && !uz[s - g[i]][i])
            {
                if(vmax[s - g[i]] + v[i] > vmax[s])
                {
                    vmax[s] = vmax[s - g[i]] + v[i];
                    for(int k = 1;k <= n;k++)
                        uz[s][k] = uz[s - g[i]][k];
                    uz[s][i] = 1;
                }
            }
        }
    fout<<vmax[gmax];
    return 0;
}