Cod sursa(job #1355712)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 22 februarie 2015 22:18:26
Problema Carnati Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<bits/stdc++.h>
using namespace std;

struct cell
{
    int c,poz;
};

struct kkt
{
    int val,cnt,mn,scad;
};

ifstream fin("carnati.in");
ofstream fout("carnati.out");

const int NMAX=2005;

int n,job,c;
cell a[NMAX];
kkt dp[NMAX];

inline bool cmp(const cell A,const cell B)
{
    return A.poz<B.poz;
}

int main()
{
    int i,j,aux,mx=-(1<<30);
    fin>>n>>job;
    for (i=1;i<=n;i++) fin>>a[i].poz>>a[i].c;
    sort(a+1,a+n+1,cmp);
    mx=dp[1].val=a[1].c-job;dp[1].scad=job;dp[1].cnt=1;
    dp[1].mn=a[1].c;
    for (i=2;i<=n;i++)
        {
            dp[i].val=a[i].c-job;
            dp[i].cnt=1;dp[i].scad=job;
            dp[i].mn=a[i].c;
            for (j=i-1;j>=1;j--)
                {
                    aux=min(a[i].c,dp[j].mn)*(dp[j].cnt+1)-dp[j].scad-(a[i].poz-a[j].poz)*job;
                    if (aux>dp[i].val)
                        {
                            dp[i].val=aux;
                            dp[i].scad=dp[j].scad+(a[i].poz-a[j].poz)*job;
                            dp[i].cnt=dp[j].cnt+1;
                            dp[i].mn=min(a[i].c,dp[j].mn);
                        }
                }
            mx=max(mx,dp[i].val);
        }
    fout<<mx<<"\n";
    return 0;
}