Cod sursa(job #599711)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 29 iunie 2011 14:40:01
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream>
#include<algorithm>
using namespace std;
int n,C,profit[2010],sol;
struct Cumparator{int t,p;};
Cumparator a[2010];

inline bool Ordonare(const Cumparator A,const Cumparator B)
{
	if(A.t==B.t)
		return A.p>B.p;
	return A.t<B.t;
}

inline int max(int a,int b)
{
	if(a<b)
		return b;
	return a;
}

int main()
{
	int i,j,pret;
	ifstream fin("carnati.in");
	fin>>n>>C;
	for(i=1;i<=n;i++)
		fin>>a[i].t>>a[i].p;
	fin.close();
	
	sort(a+1,a+n+1,Ordonare);
	sol=0;
	profit[0]=-1;
	a[0].t=a[0].p=-1;
	
	for(i=1;i<=n;i++) //pretul
	{
		pret=a[i].p;
		for(j=1;j<=n;j++) //cumparatorul
		{
			if(a[j].p>=pret)
				profit[j]=max(profit[j-1]-(a[j].t-a[j-1].t)*C+pret,pret-C);
			else
				profit[j]=max(profit[j-1]-(a[j].t-a[j-1].t)*C,-C);
			sol=max(sol,profit[j]);
		}
	}
	
	ofstream fout("carnati.out");
	fout<<sol<<"\n";
	fout.close();
	
	return 0;
}