Cod sursa(job #147752)

Utilizator znakeuJurba Andrei znakeu Data 3 martie 2008 14:55:23
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 2001
#define MAXT 1501

struct carnat
{
	int p,t;
};
carnat v[MAXN];
int V[MAXN],max=0,n=0,c=0;

int cmp(const void *a, const void *b)
{
	carnat x=*(carnat*)a,y=*(carnat*)b;
	return x.t-y.t;
}

int main()
{
	
	FILE *in  = fopen("carnati.in","r");
	FILE *out = fopen("carnati.out","w");
	
	int i,j,k,x;
	
	fscanf(in,"%d%d",&n,&c);
	
	for (i=0; i<n; i++)
		fscanf(in,"%d%d",&v[i].t,&v[i].p);
	
	qsort(v,n,sizeof(v[0]),cmp);
	
	if (v[0].t>=v[i].t)
			k=v[i].t;
		else
			k=0;
	V[0]=k-c;
	max=V[0];
	
	for (i=0; i<n; i++)
	{
		x=v[i].p;
		if (v[0].p>=x)
			k=v[i].p;
		else
			k=0;
		V[0]=k-c;
		if (V[0]>max)
			max=V[0];
		for (j=1; j<n; j++)
		{
			if (v[j].p>=x)
				k=v[i].p;
			else
				k=0;
			V[j]=k-c;
			if (V[j-1]-(v[j].t-v[j-1].t)*c+k>V[j])
				V[j]=V[j-1]-(v[j].t-v[j-1].t)*c+k;
			if (V[j]>max)
				max=V[j];
		}
	}
	
	fprintf(out,"%d\n",max);
	
	fclose(in);
	fclose(out);
	return 0;
}