Cod sursa(job #997656)

Utilizator andreiiiiPopa Andrei andreiiii Data 14 septembrie 2013 18:21:00
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <cstdio>
#include <algorithm>
#define N 2002
using namespace std;

struct nr
{
	int t, p;
	bool operator < (const nr &e) const
	{
		return t<e.t;
	}
};

nr a[N];
int dp[N];

int main()
{
	freopen("carnati.in", "r", stdin);
	freopen("carnati.out", "w", stdout);
	int n, k, i, j, cost, sol=0;
	scanf("%d %d ", &n, &k);
	for(i=1;i<=n;i++)
	{
		scanf("%d %d ", &a[i].t, &a[i].p);
	}
	sort(a+1, a+n+1);
	for(i=1;i<=n;i++)
	{
		cost=a[i].p;
		dp[n]=-k;
		if(a[n].p>=cost) dp[n]+=cost;
		sol=max(sol, dp[n]);
		for(j=n-1;j;j--)
		{
			dp[j]=max(-k, dp[j+1]-k*(a[j+1].t-a[j].t));
			if(a[j].p>=cost) dp[j]+=cost;
			sol=max(sol, dp[j]);
		}
	}
	printf("%d", sol);
}