제출 #1013112

#제출 시각아이디문제언어결과실행 시간메모리
1013112Luvidi수열 (APIO14_sequence)C++17
50 / 100
2077 ms32224 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll, ll> #define pii pair<int, int> #define fs first #define sc second #define pb push_back void solve() { int n,k; cin>>n>>k; k++; ll a[n+1],pre[n+1]; pre[0]=0; for(int i=1;i<=n;i++){ cin>>a[i]; pre[i]=pre[i-1]+a[i]; } ll dp[n+1][k+1],prev[n+1][k+1]; memset(dp,0,sizeof(dp)); for(int i=0;i<=n;i++){ for(int j=i+1;j<=k;j++)dp[i][j]=-1e18; if(i)dp[i][0]=-1e18; } for(int i=1;i<=n;i++){ for(int j=1;j<=k;j++){ for(int x=1;x<=i;x++){ dp[i][j]=max(dp[i][j],pre[x-1]*(pre[i]-pre[x-1])+dp[x-1][j-1]); if(dp[i][j]==pre[x-1]*(pre[i]-pre[x-1])+dp[x-1][j-1])prev[i][j]=x-1; } } } cout<<dp[n][k]<<'\n'; vector<int> ans; int c=n,x=k; while(c){ ans.pb(c); c=prev[c][x]; x--; } reverse(ans.begin(),ans.end()); ans.pop_back(); for(int i:ans)cout<<i<<' '; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); 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...