Submission #1315165

#TimeUsernameProblemLanguageResultExecution timeMemory
1315165AlmontherSplit the sequence (APIO14_sequence)C++20
50 / 100
275 ms3652 KiB
#include<bits/stdc++.h>

using namespace std;

#define ll long long 
#define co cout<< 
// stuff
const int maxn=1e3+5,maxk=205;
ll dp[maxn][maxk],arr[maxn],pref[maxn]={},pos[maxn][maxk];
ll n,k;
ll rec(ll x,ll left){
    if(left==0) return 0;
    if(x==n) return -1e18;
    if(dp[x][left]!=-1) return dp[x][left];
    ll mx=-1e18,ps;
    for(int y=x+1;y<=n;y++){
        ll a=rec(y,left-1)+(pref[n]-pref[y-1])*(pref[y-1]-pref[x-1]);
        if(a>mx) mx=a,ps=y-1;
    }
    pos[x][left]=ps;
    return dp[x][left]=mx;
}
void solve(){
    memset(dp,-1,sizeof(dp));
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>arr[i];
        pref[i]=pref[i-1]+arr[i];
    }
    co rec(1,k)<<'\n';
    ll a=1;
    while(k){
        co pos[a][k]<<' ';
        a=pos[a][k]+1,k--;
    }
}

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    int _=1;
    //cin>>_;
    while(_--) solve();
}
#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...