제출 #304410

#제출 시각아이디문제언어결과실행 시간메모리
304410vipghn2003Split the sequence (APIO14_sequence)C++14
0 / 100
906 ms18168 KiB
#include<bits/stdc++.h>

using namespace std;

const int N=1e5+5;
const int K=205;
int n,k,a[N],s[N],dp[K][N],opt[K][N];

void calc(int lev,int l,int r,int L,int R)
{
    if(l>r) return ;
    int mid=(l+r)/2;
    dp[lev][mid]=-1e9;
    for(int i=L;i<=min(mid-1,R);i++)
    {
        if(dp[lev][mid]<dp[lev-1][i]+(s[mid]-s[i])*(s[n]-s[mid]))
        {
            dp[lev][mid]=dp[lev-1][i]+(s[mid]-s[i])*(s[n]-s[mid]);
            opt[lev][mid]=i;
        }
    }
    //cout<<lev<<' '<<mid<<' '<<dp[lev][mid]<<'\n';
    calc(lev,l,mid-1,L,opt[lev][mid]);
    calc(lev,mid+1,r,opt[lev][mid],R);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        s[i]=s[i-1]+a[i];
    }
    dp[1][0]=-1e9;
    for(int i=1;i<=n;i++)
    {
        dp[1][i]=s[i]*(s[n]-s[i]);
        opt[1][i]=i;
    }
    for(int lev=2;lev<=k;lev++) calc(lev,1,n,0,n-1);
    int res=-1e9,cur;
    for(int i=1;i<=n;i++)
    {
        if(res<dp[k][i])
        {
            res=dp[k][i];
            cur=i;
        }
    }
    cout<<res<<'\n';
    while(k)
    {
        cout<<cur<<' ';
        cur=opt[k][cur];
        k--;
    }
}
/*
7 3
4 1 3 4 0 2 3
*/

컴파일 시 표준 에러 (stderr) 메시지

sequence.cpp: In function 'int main()':
sequence.cpp:57:12: warning: 'cur' may be used uninitialized in this function [-Wmaybe-uninitialized]
   57 |         cur=opt[k][cur];
      |         ~~~^~~~~~~~~~~~
#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...