Submission #69379

#TimeUsernameProblemLanguageResultExecution timeMemory
69379MKopchev휴가 (IOI14_holiday)C++14
0 / 100
26 ms4344 KiB
#include<bits/stdc++.h>
#include "holiday.h"
using namespace std;
const int nmax=3e3+42;
vector<int> other;
int SZ;
priority_queue< pair<int/*value*/,int/*index*/> >pq,help;
priority_queue<int> idle;
long long mem[nmax][2];
long long rec(int d,bool taken)
{
    //d=d-taken;
    if(d<=0)return 0;
    if(mem[d][taken]!=-1)return mem[d][taken];
    priority_queue<int> q=idle;
    long long ans=0,sum=0;
    for(int i=taken;i<SZ;i++)
    {
        q.push(-other[i]);
        sum=sum+other[i];
        while(q.size()>d-i)
        {
            sum=sum+q.top();
            q.pop();
        }
        ans=max(ans,sum);
    }
    //for(auto k:other)cout<<k<<" ";cout<<" -> "<<d<<" "<<taken<<" "<<ans<<endl;
mem[d][taken]=ans;
return ans;
}
long long solve(int start,int d,vector<int> now)
{
    memset(mem,-1,sizeof(mem));
    other={};
    for(int i=0;i<=start;i++)
        other.push_back(now[i]);
    reverse(other.begin(),other.end());
    SZ=other.size();
    //move right
    long long ans=0;
    int n=now.size();
    for(int i=start;i<n;i++)
    {
        pq.push({-now[i],i});
        int rem=pq.size();
        rem=min(d-(i-start),rem);
        help=pq;
        bool taken=0;
        long long sum=0;
        for(int j=0;j<=start;j++)
        {
            long long val=rec(d-2*(i-start)-j,taken);
            ans=max(ans,sum+val);
            //cout<<i<<" "<<j<<" -> "<<sum<<" "<<val<<endl;
            if(help.size())
            {
                sum=sum-help.top().first;
                if(help.top().second==start)taken=1;
                help.pop();
            }
        }
    }
    return ans;
}

long long findMaxAttraction(int n, int start, int d,int attraction[])
{
vector<int> now={};
for(int i=0;i<n;i++)now.push_back(attraction[i]);
long long ans=solve(start,d,now);
reverse(now.begin(),now.end());
ans=max(ans,solve(n-1-start,d,now));
return ans;
}
/*
int att[5]={10,2,20,30,1};
int main()
{
cout<<findMaxAttraction(5,2,7,att)<<endl;
}
*/

Compilation message (stderr)

holiday.cpp: In function 'long long int rec(int, bool)':
holiday.cpp:21:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         while(q.size()>d-i)
               ~~~~~~~~^~~~
grader.cpp: In function 'int main()':
grader.cpp:7:12: warning: variable 'n_s' set but not used [-Wunused-but-set-variable]
     int i, n_s;
            ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...