Pagini recente » Cod sursa (job #1770456) | Cod sursa (job #1932275) | Cod sursa (job #3132073) | Cod sursa (job #1911158) | Cod sursa (job #1504480)
#include <cstdio>
#include <algorithm>
#define Dim 2002
using namespace std;
int n, Sol = -(1 << 30), s, c, dp[2][Dim];
struct nod
{
int t;
int p;
}v[Dim];
bool cmp(const nod a, const nod b)
{
return a.t < b.t;
}
void read()
{
freopen("carnati.in", "r", stdin);
freopen("carnati.out", "w", stdout);
scanf("%d %d", &n, &c);
for(int i = 1; i <= n; ++ i)
scanf("%d %d", &v[i].t, &v[i].p);
}
void solve()
{
int i, j;
sort(v + 1, v + n + 1, cmp);
for(i = 1; i <= n; ++ i)
{
dp[0][i] = v[i].p - c;
for(j = i - 1, s = v[i].p; j >= 1; -- j)
{
if(v[j].p >= v[i].p)
s += v[i].p;
dp[0][i] = max(dp[0][i], s - (v[i].t - v[j].t + 1) * c);
}
for(j = i + 1, s = 0; j <= n; ++ j)
{
if(v[j].p >= v[i].p)
s += v[i].p;
dp[1][i] = max(dp[1][i], s - (v[j].t - v[i].t) * c);
}
Sol = max(Sol, dp[0][i] + dp[1][i]);
}
}
void write()
{
printf("%d\n", Sol);
}
int main()
{
read();
solve();
write();
return 0;
}