제출 #857808

#제출 시각아이디문제언어결과실행 시간메모리
85780812345678수열 (APIO14_sequence)C++17
33 / 100
5 ms1124 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int nx=2e2+5;

ll n, k, qs[nx];
ll dp[nx][nx], bk[nx][nx];

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n>>k;
    for (int i=1; i<=n; i++) cin>>qs[i], qs[i]+=qs[i-1];
    for (int i=0; i<nx; i++) for (int j=0; j<nx; j++) dp[i][j]=LLONG_MAX;
    dp[0][0]=0;
    for (int i=1; i<=n; i++) 
    {
        for (int j=1; j<=k+1; j++) 
        {
            for (int l=0; l<i; l++) 
            {
                if (dp[l][j-1]==LLONG_MAX) continue;
                ll nv=dp[l][j-1]+(qs[i]-qs[l])*(qs[i]-qs[l]);
                if (nv<dp[i][j]) bk[i][j]=l, dp[i][j]=nv;
            }
            //cout<<i<<' '<<j<<' '<<dp[i][j]<<' '<<bk[i][j]<<'\n';
        }
    }
    cout<<(qs[n]*qs[n]-dp[n][k+1])/2<<'\n';
    ll l=n, ly=k+1;
    while (ly>1)
    {
        l=bk[l][ly];
        ly--;
        cout<<l<<' ';
    }
}

/*
7 3
4 1 3 4 0 2 3
*/
#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...