Cod sursa(job #1586777)

Utilizator andreey_047Andrei Maxim andreey_047 Data 1 februarie 2016 17:27:14
Problema Carnati Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax = 2005;

int N,K,sol,dp[nmax];

struct el{
  int t,x;
}a[nmax];

inline bool cmp(const el &A,const el &B){
 return A.t < B.t;
}

inline int Ok(int D){

 int i,best = 0;
    for(i = 1; i <= N; ++i){
        if(a[i].x < D) {dp[i] =dp[i-1]-K*(a[i].t-a[i-1].t); continue;}
        dp[i] = max(D-K,dp[i-1]+D-K*(a[i].t-a[i-1].t));
        best = max(best,dp[i]);
    }
   memset(dp,0,sizeof(dp));
    return best;
}

int main(){
    int i;
    freopen("carnati.in","r",stdin);
    freopen("carnati.out","w",stdout);
    scanf("%d %d\n",&N,&K);
    for(int i = 1; i <= N; ++i)
        scanf("%d %d\n",&a[i].t,&a[i].x);

    sort(a+1,a+N+1,cmp);
    for(i = 1; i <= N; ++i)
       sol = max(sol,Ok(a[i].x));
    printf("%d\n",sol);
    return 0;
}