Cod sursa(job #1355619)

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

struct cell
{
    int c,poz;
};

struct kkt
{
    int st,dr,val,cnt;
};

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.c>B.c;
}

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