Cod sursa(job #2639067)

Utilizator PatrickCplusplusPatrick Kristian Ondreovici PatrickCplusplus Data 31 iulie 2020 10:48:06
Problema Pitici Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
#define nmax 2005

using namespace std;

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

int n, d;
int dp[nmax][nmax]; //inaltimea considerand primii i pitici, j dintre ei fiind scosi
int sp[nmax];

struct el
{
    int l, h;
}v[nmax];

bool cmp(el a, el b)
{
    return (a.h+a.l) > (b.h+b.l);
}

inline void dinamic()
{
    for (int i = 0; i <= n; i++)
    {
        if (i)
            sp[i] = sp[i-1] + v[i].h;
        for (int j = 0; j <= n; j++)
            dp[i][j] = -2e9;
    }
    dp[0][0] = 0;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            dp[i][j] = dp[i-1][j] + v[i].h;
            if (j == 0)
                continue;
            if (dp[i-1][j-1] + v[i].l + sp[n] - sp[i-1] >= d) //atunci poate iesi piticul i
                dp[i][j] = max(dp[i][j], dp[i-1][j - 1]);
        }
    }
}

int main()
{
    fin >> n;
    for (int i = 1; i <= n; i++)
        fin >> v[i].h >> v[i].l;
    sort(v+1, v+n+1, cmp);
    fin >> d;
    dinamic();
    int ans;
    for (ans = n; dp[n][ans] < 0; ans--) ;
    fout << ans;
    return 0;
}