Cod sursa(job #1777852)

Utilizator silkMarin Dragos silk Data 12 octombrie 2016 22:37:07
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#include <algorithm>
#define INF 1<<30
#define NMax 2000
#define mp make_pair
#define MAX(a,b)((a)>(b)?(a):(b))
using namespace std;

pair<int, int> v[NMax+1];
int dp[NMax+1];

int main(){
    freopen("carnati.in","r",stdin);
    freopen("carnati.out","w",stdout);

    int i,j,N,C,T,x,y,temp,val,ans=-INF;

    scanf("%d %d",&N,&C);
    for(i = 1; i <= N; ++i)
    {
        scanf("%d %d",&x,&y);
        v[i] = mp(x,y);
    }
    sort(v+1,v+N+1);

    v[0].first = v[1].first - 1;
    for(i = 1; i <= N; ++i)
        for(j = 1; j <= N; ++j)
        {
            val = ( v[j].second >= v[i].second ? v[i].second : 0 );
            dp[j] = MAX( dp[j-1] - ( v[j].first - v[j-1].first ) * C + val, val - C );
            if( ans < dp[j] ) ans = dp[j];
        }

    printf("%d\n", ans);



return 0;
}