Cod sursa(job #173699)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 7 aprilie 2008 22:59:47
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>
#include <algorithm>
#define N 2001
using namespace std;
struct CA{int t,p;};
int Cd,maxi,S[N],n,C;
CA v[N];
void scan()
{
	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);
	v[0].p=v[0].t=-N;
}
bool comp(const CA &x, const CA &y){  
    if(x.t<y.t)  
        return true;  
    return false;  
} 
void solve()
{
	sort(v+1,v+n+1, comp);
	for(int i=1;i<=n;++i,S[0]=0)  
    	for(int j=1;j<=n;++j,Cd=0)  
        {  
			if(v[j].p>=v[i].p) 
				Cd=v[i].p;  
			S[j]=S[j-1]-(v[j].t-v[j-1].t)*C+Cd;  
			if(S[j]<Cd-C) 
				S[j]=Cd-C;  
			if(S[j]>maxi) 
				maxi=S[j]; 
		}  
    printf("%d\n", maxi);
}
int main()
{
	scan();
	solve();
	return 0;
}