Cod sursa(job #315386)

Utilizator DraStiKDragos Oprica DraStiK Data 15 mai 2009 11:56:14
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <algorithm>
#define DIM 2005
#define INF 1<<31-1
using namespace std;
struct carnat {int t,p;} a[DIM];
int b[DIM];
int n,c,best;
void read ()
{
	int i;
	scanf ("%d%d",&n,&c);
	for (i=1; i<=n; ++i)
		scanf ("%d%d",&a[i].t,&a[i].p);
    b[0]=-c;
}
int cmp (carnat a,carnat b)
{
	return a.t<b.t;
}
int max (int a,int b)
{
	if (a>b)
		return a;
	return b;
}
void solve ()
{
	int i,j;
	for (i=1; i<=n; ++i)
	{
		for (j=1; j<=n; ++j)
		{
			if (a[i].p<=a[j].p)
				b[j]=max (b[j-1]-(a[j].t-a[j-1].t)*c+a[i].p,a[i].p-c);
			else
				b[j]=max (b[j-1]-(a[j].t-a[j-1].t)*c,-c);
			if (b[j]>best)
				best=b[j];
		}
	}
	printf ("%d",best);
}
int main ()
{
	freopen ("carnati.in","r",stdin);
	freopen ("carnati.out","w",stdout);
	read ();
  	sort (a+1,a+n+1,cmp);
	solve ();
	return 0;
}