Cod sursa(job #2704103)

Utilizator emadinuDinu Ema emadinu Data 9 februarie 2021 19:12:07
Problema Carnati Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 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,nr,profit=-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)
            {
                if(i==1)cost[i]=-C;
                else cost[i]=-(v[i].h-v[i-1].h)*C;
            }
                
            else if(i==1)cost[i]=nr-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>profit)
            profit=maxi;
    }
    cout<<profit;
 
    return 0;
}