제출 #1354263

#제출 시각아이디문제언어결과실행 시간메모리
1354263tung04885수열 (APIO14_sequence)C++20
0 / 100
0 ms344 KiB
#include <bits/stdc++.h>
using namespace std;
#define MAX 100100
#define MAXK 202
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
#define all(a) (a).begin(),(a).end()
#define __buitin_popcount __builtin_popcountll
#define BIT(x,i) (((x)>>(i))&1ll)
#define MASK(i) (1ll<<(i))

template<class X,class Y> bool maximize(X &x,Y y)
{
    if(x<=y)
    {
        x=y;
        return 1;
    }
    return 0;
}

template<class X,class Y> bool minimize(X &x,Y y)
{
    if(y<x)
    {
        x=y;
        return 1;
    }
    return 0;
}

const int inf=1e9+412009;
const ll INF=2e18+412009;

int n,K;
int a[MAX];

void nhap()
{
    cin>>n>>K;

    for(int i=1;i<=n;i++) cin>>a[i];
}

ll dp[MAX][2]={};
int trace[MAX][MAXK]={};
ll f[MAX];

void solve()
{
    for(int i=1;i<=n;i++) f[i]=f[i-1]+a[i];

    for(int i=1;i<=n;i++) dp[i][1]=f[i]*(f[n]-f[i]);

    for(int k=2;k<=K;k++)
    {
        for(int i=1;i<=n;i++) dp[i][0]=dp[i][1],dp[i][1]=0;

        for(int i=3;i<=n;i++) for(int j=i-1;j>=2;j--)
        {
            if(maximize(dp[i][1],dp[j-1][0]+(f[i]-f[j-1])*(f[n]-f[i])))
            {
                trace[i][k]=j-1;
            }
        }
    }

    ll ans=0;
    int u=0;

    for(int i=1;i<=n;i++)
    {
        if(maximize(ans,dp[i][1])) u=i;
    }

    cout<<ans<<'\n';


    stack<int> tracing;

    int v=K;

    while(v!=0)
    {
        tracing.push(u);

        u=trace[u][v];

        v--;
    }

    while(!tracing.empty()) cout<<tracing.top()<<' ',tracing.pop();
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);

    nhap();
    solve();

    return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...