Pagini recente » Cod sursa (job #2118107) | Cod sursa (job #693803) | Cod sursa (job #311704) | Cod sursa (job #330214) | Cod sursa (job #2639067)
#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;
}