Submission #1365241

#TimeUsernameProblemLanguageResultExecution timeMemory
1365241vjudge1Split the sequence (APIO14_sequence)C++20
22 / 100
2098 ms66024 KiB
#include<bits/stdc++.h>
using namespace std;
// #define int long long
const int maxn=2e2+5;
const int maxk=2e2+5;
int n,k,a[maxn];
long long dp[maxn][maxn][maxk],sm[maxn];
long long f(int x,int y,int z)
{
    if(y<=x||z<=0)return 0;
    if(dp[x][y][z]!=-1)return dp[x][y][z];
    long long sm1=0,sm2=sm[y]-sm[x-1];
    for(int i=x;i<y;i++)
    {
        sm1+=a[i];
        sm2-=a[i];
        for(int j=0;j<z;j++)dp[x][y][z]=max(dp[x][y][z],sm1*sm2+f(x,i,j)+f(i+1,y,(z-j)-1));
    }
    return dp[x][y][z];
}
vector<int> cl(int x,int y,int z)
{
    if(y<=x||z<=0)return {};
    vector<int>V;
    vector<int>empt;
    long long sm1=0,sm2=sm[y]-sm[x-1];
    for(int i=x;i<y;i++)
    {
        sm1+=a[i];
        sm2-=a[i];
        for(int j=0;j<z;j++)if(dp[x][y][z]==sm1*sm2+f(x,i,j)+f(i+1,y,(z-j)-1))
        {
            vector<int>v1=cl(x,i,j),v2=cl(i+1,y,(z-j)-1);
            // cout<<x<<' '<<y<<' '<<z<<' '<<i<<' '<<j<<' '<<sm1*sm2<<' '<<sm1<<' '<<sm2<<endl;
            V.push_back(i);
            for(int l:v1)V.push_back(l);
            for(int l:v2)V.push_back(l);
            return V;
        }
    }
    return {};
}
signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>k;
    for(int x=0;x<=n;x++)for(int y=0;y<=n;y++)for(int z=0;z<=k;z++)dp[x][y][z]=-1;
    for(int x=1;x<=n;x++)
    {
        cin>>a[x];
        sm[x]=sm[x-1]+a[x];
    }
    cout<<f(1,n,k)<<'\n';
    vector<int>vc=cl(1,n,k);
    for(auto i:vc)cout<<i<<' ';
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...