Cod sursa(job #1355738)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 22 februarie 2015 22:33:30
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <algorithm>

#define DIM 2005
#define INF 2000000000
#define infile "carnati.in"
#define outfile "carnati.out"

using namespace std;

ifstream f(infile);
ofstream g(outfile);

pair<int, int> v[DIM];

int dp[DIM];

int main() {

	int n, c;

	f >> n >> c;

	for (int i = 1; i <= n; ++i)
		f >> v[i].first >> v[i].second;

	std::sort(v + 1, v + n + 1);

	int ans = -INF;

	v[0].first = v[1].first - 1;

	for (int step = 1; step <= n; ++step) {

		int cost = v[step].second;

		for (int i = 1; i <= n; ++i)
			dp[i] = std::max(dp[i - 1] - (v[i].first - v[i - 1].first) * c + (cost > v[i].second ? 0 : cost), (cost > v[i].second ? 0 : cost) - c);

		for (int i = 1; i <= n; ++i)
			ans = std::max(ans, dp[i]);

	}

	g << ans;

	return 0;
}

//Trust me, I'm the Doctor!