Cod sursa(job #2589554)

Utilizator baranceanuBaranceanu Vlad baranceanu Data 26 martie 2020 15:59:13
Problema Heavy metal Scor 0
Compilator cpp-64 Status done
Runda CevaȘiMaiEz Marime 1.26 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("heavymetal.in");
ofstream fout("heavymetal.out");
struct concert{int sf;int dur;};
concert v[100005];
int dp[1005];
int n;
bool compar(concert x,concert y)
{
    return x.sf<y.sf;
}
int main()
{
    int a,i,maxim,j;
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>a>>v[i].sf;
        v[i].dur=v[i].sf-a;
    }
    sort(v+1,v+n+1,compar);
    maxim=0;
    for(i=1;i<=n;i++)
    {
        if(dp[v[i].sf]==0&&maxim==0)
        {
            dp[v[i].sf]=v[i].dur;
            maxim=v[i].dur;
        }
        else
        {
            if(dp[v[i].sf]==0)
            {
                j=0;
                while(dp[v[i].sf-j-v[i].dur]==0)
                    j++;
                dp[v[i].sf]=v[i].dur+dp[v[i].sf-j-v[i].dur];
                if(dp[v[i].sf]>maxim)
                    maxim=dp[v[i].sf];
            }
            else
            {
                j=0;
                while(dp[v[i].sf-j-v[i].dur]==0)
                    j++;
                dp[v[i].sf]=min(dp[v[i].sf],dp[v[i].sf-j-v[i].dur]+v[i].dur);
                if(dp[v[i].sf]>maxim)
                    maxim=dp[v[i].sf];
            }
        }
    }
    fout<<maxim;
    return 0;
}