Cod sursa(job #2875823)

Utilizator AndreeeeiAndrei-Ioan Andreeeei Data 22 martie 2022 13:23:02
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <algorithm>

using namespace std;
ifstream in ("rucsac.in");
ofstream out ("rucsac.out");

struct pii
{

    int x, y;

};

bool cmp1 (pii v1, pii v2)
{
    if(v1.y > v2.y)
        return 0;
    else
        return 1;
}

bool cmp (pii v1, pii v2)
{
    if(v1.x > v2.x)
        return 0;
    else if(v1.x < v2.x)
        return 1;
    else
        return cmp1(v1, v2);
}
pii v[10000];
int dp1[10005], dp2[10005];

int main()
{
    int n, G;

    in >> n >> G;

    for(int i = 1; i <= n; i ++)
        in >> v[i].x >> v[i].y;

    sort(v + 1, v + n + 1, cmp);

    for(int i = 1; i <= n; i ++)
    {
        for(int g = 1; g <= G; g ++)
        {
            dp1[g] = dp2[g];

            if(v[i].x <= g)
                dp1[g] = max(dp1[g], dp2[g - v[i].x] + v[i].y);
        }

        for(int j = 1; j <= G; j ++)
        {
            dp2[j] = dp1[j];
        }
    }
    out << dp1[G];

    return 0;
}