Cod sursa(job #300899)

Utilizator Andreid91Ciocan Andrei Andreid91 Data 7 aprilie 2009 19:26:53
Problema Carnati Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<fstream.h>

long long p[2005],t[2005],pret[2005],best[2005];

int main()
{
long long max,s,n,i,j,c;
ifstream f("carnati.in");
f>>n>>c;
for (i=1;i<=n;i++)
	f>>t[i]>>p[i];
best[1]=p[1]-c;
pret[1]=p[1];
for (i=2;i<=n;i++)
	{
	best[i]=p[i]-c;
	pret[i]=p[i];
	for (j=1;j<i;j++)
		if (pret[j]<=p[i])
				    if (best[j]+pret[j]-c*(t[i]-t[j])>best[i]) {
									   best[i]=best[j]+pret[j]-c*(t[i]-t[j]);
									   pret[i]=pret[j];
									   }
	max=p[i]-c;
	s=max;
	for (j=i-1;j>=1;j--)
		if (p[j]>p[i]) {
			       s=s+p[i];
			       if (s-(t[i]-t[j])*c>max ) max=s-c*(t[i]-t[j]);
			       }
	if (max>best[i]) {
			 best[i]=max;
			 pret[i]=p[i];
			 }
	}
max=best[1];
for (i=2;i<=n;i++)
	if (max<best[i]) max=best[i];
ofstream g("carnati.out");
g<<max;
g.close();
f.close();
return 0;
}