제출 #1013131

#제출 시각아이디문제언어결과실행 시간메모리
1013131Luvidi수열 (APIO14_sequence)C++17
0 / 100
73 ms131072 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++){ int y=lower_bound(pre+1,pre+n+1,pre[i]-pre[i]/j)-pre; for(int x=0-2;x<3;x++){ int p=max(1,min(y+x,i)); dp[i][j]=max(dp[i][j],pre[p-1]*(pre[i]-pre[p-1])+dp[p-1][j-1]); if(dp[i][j]==pre[p-1]*(pre[i]-pre[p-1])+dp[p-1][j-1])prev[i][j]=p-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...