Cod sursa(job #2704375)

Utilizator emadinuDinu Ema emadinu Data 10 februarie 2021 14:25:34
Problema Carnati Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#include<algorithm>
using namespace std;
ifstream cin("carnati.in");
ofstream cout("carnati.out");
 
struct ura
{
    int h,pret;
}v[2001];
long long cost[2001];
 
bool cmp (ura a, ura b)
{
    if(a.h < b.h) return true;
    return false;
}
 
int main()
{
    long long s=0,nr,fin=-2000000000000000;
    int n,C,i,j;
    
    cin>>n>>C;
    for(i=1;i<=n;i++)
        cin>>v[i].h>>v[i].pret;
    sort(v+1,v+n+1,cmp);
    
    for(j=1;j<=n;j++)
    {
        nr=v[j].pret;
        for(i=1;i<=n;i++)
        {
            if(v[i].pret<nr) cost[i]=-(v[i].h-v[i-1].h)*C;
            else cost[i]=nr-(v[i].h-v[i-1].h)*C;
        }
            
        s=0;
        int inc=1,incf;
        long long maxi=-2000000000000000,k;
        for(i=1;i<=n;i++)
        {
            if(s<0)
            {
                inc=i;
                s=0;
            }
            s=s+cost[i];
            if(inc==1)
            {
                if(s>maxi)
                {
                    maxi=s;
                    incf=inc;
                }
            }
            else
            {
                k=(v[inc].h-v[inc-1].h-1)*C;
                if(s+k>maxi)
                {
                    maxi=s+k;
                    incf=inc;
                }
            }
        }
 
        if(maxi>fin)
            fin=maxi;
    }
    cout<<fin;
 
    return 0;
}