Cod sursa(job #2450243)

Utilizator ejoi2019Ejoi 2019 ejoi2019 Data 22 august 2019 13:36:25
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std;

void r(int &a)
{
        int elsker;
        scanf("%d",&elsker);
        a=elsker;
}

struct JEG
{
        int w;
        int x;
};

bool operator < (JEG a,JEG b)
{
        return a.w<b.w;
}

JEG a[5007];
int n,m;

int gold[(int)1e4+7];

int main()
{
        freopen("rucsac.in","r",stdin); /// te  bat
        freopen("rucsac.out","w",stdout);  /// te  bat

        r(n);
        r(m);
        for(int i=1;i<=n;i++)
        {
                r(a[i].w);
                r(a[i].x);
        }
        sort(a+1,a+n+1);
        for(int i=1;i<=m;i++)
                gold[i]=-(int)1e9;
        int mx=0;
        for(int i=1;i<=n;i++)
        {
                /// st<=mx
                /// st+a[i].w<=m
                /// st<=min(mx,m-a[i].w)
                int st=min(mx,m-a[i].w);
                for(int j=st;j>=0;j--)
                        gold[j+a[i].w]=max(gold[j+a[i].w],gold[j]+a[i].x);
                mx+=a[i].w;
                mx=min(mx,m);
        }
        int ub=0;
        for(int i=0;i<=m;i++)
                ub=max(ub,gold[i]);
        cout<<ub<<"\n";
        return 0;
}