Cod sursa(job #138388)

Utilizator MariusMarius Stroe Marius Data 18 februarie 2008 15:55:24
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

const char iname[] = "carnati.in";
const char oname[] = "carnati.out";

#define MAXN  2005

int n, cph;

int C[MAXN];

vector <pair <int, int> > A;


int main(void)
{
	FILE *fi;
	
	fi = fopen(iname, "r");

	fscanf(fi, "%d %d", &n, &cph);
	
	A.resize(n);

	for (int i = 0; i < n; ++ i)
		fscanf(fi, "%d %d", &A[i].first, &A[i].second);

	sort(A.begin(), A.end());

	int res = 0;

	for (int i = 0; i < n; ++ i)
	{
		int X = A[i].second;
		
		for (int j = 0; j < n; ++ j)
		{
			C[j] = ((X <= A[j].second) ? X : 0) - cph;
			
			if (j > 0) 
			{
				int tmp = C[j - 1] - (A[j].first - A[j - 1].first) * cph + ((X <= A[j].second) ? X : 0);
			
				if (C[j] < tmp)
					C[j] = tmp;
			}

			if (res < C[j])
				res = C[j];
		}
	}

	fprintf(fopen(oname, "w"), "%d\n", res);

	fcloseall();

	return 0;
}