Cod sursa(job #237509)

Utilizator nusmaibunkeleviprofesor cicalescu nusmaibunkelevi Data 29 decembrie 2008 22:21:53
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#define NMAX 2000
struct client{int t,p;};
typedef client *pc;

int fcmp(void const*a,void const*b){
if(((pc)a)->t>((pc)b)->t) return 1;
else if (((pc)a)->t<((pc)b)->t) return -1;
	 else return 0;
}

int main(){
freopen("carnati.in","r",stdin);
freopen("carnati.out","w",stdout);
int n,c,i,j,profmax=INT_MIN,pret,a,b,castig,tmin=INT_MAX;
client v[NMAX+1];
int profit[NMAX+1]={0};
scanf("%d%d",&n,&c);
for(i=1;i<=n;++i) {
	scanf("%d%d",&v[i].t,&v[i].p);
	if(tmin>v[i].t) tmin=v[i].t;
	}
qsort(v,n+1,sizeof(v[0]),fcmp);
v[0].t=tmin-1;
for(i=1;i<=n;++i){
	pret=v[i].p;
	for(j=1;j<=n;++j){
		if(pret<=v[j].p) castig=pret;
		else castig=0;
		a=castig-c;
		b=profit[j-1]+castig-(v[j].t-v[j-1].t)*c;
		if(a>b) profit[j]=a;
		else profit[j]=b;
		if(profmax<profit[j]) profmax=profit[j];
		}
	}


printf("%d",profmax);
return 0;
}