Pagini recente » Cod sursa (job #199919) | Cod sursa (job #2729964) | Cod sursa (job #1663995) | Cod sursa (job #113333) | Cod sursa (job #2928056)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("carnati.in");
ofstream fout("carnati.out");
int main()
{
cin.rdbuf(fin.rdbuf());
cout.rdbuf(fout.rdbuf());
int n, k;
cin >> n >> k;
vector<pair<int, int>> vec(n + 1);
for (int i = 1; i <= n; i++)
{
int x1, x2;
cin >> x1 >> x2;
vec[i] = make_pair(x1, x2);
}
sort(vec.begin() + 1, vec.end());
int maxFin = 0;
for (int i = 1; i <= n; i++)
{
int maxPrice = vec[i].second;
pair<int, int> best{0, 0};
int j;
for (j = 1; j <= n; j++)
if (vec[j].second >= maxPrice)
{
best = make_pair(vec[j].first, maxPrice - k);
break;
}
for (j = j + 1; j <= n; j++)
if (vec[j].second >= maxPrice)
{
int nextOption = maxPrice - (vec[j].first - best.first) * k;
if (nextOption + best.second < maxPrice && nextOption > 0)
best = make_pair(vec[j].first, maxPrice - k);
else if (nextOption > 0)
best = make_pair(vec[j].first, best.second + nextOption);
}
if (best.second > maxFin)
maxFin = best.second;
}
cout << maxFin;
return 0;
}