제출 #159140

#제출 시각아이디문제언어결과실행 시간메모리
159140nafis_shifat수열 (APIO14_sequence)C++11
0 / 100
2056 ms17040 KiB
#include<bits/stdc++.h> #define pii pair<int,int> #define ll long long using namespace std; const ll inf=1e15; int main() { int n,k; cin>>n>>k; ll dp[n+10][k+10]={}; ll a[n+5]={}; ll cum1[n+5]={}; ll cum2[n+5]={}; for(int i=1;i<=n;i++) { cin>>a[i]; cum1[i]=cum1[i-1]+a[i]; } for(int i=n;i>0;i--)cum2[i]=cum2[i+1]+a[i]; for(int i=0;i<=n;i++)for(int j=0;j<=k;j++)dp[i][j]=0; for(int i=0;i<=n;i++) { dp[i][0]=0; dp[i][1]=cum1[i]*cum2[i+1]; } for(int i=1;i<n;i++) { for(int j=2;j<=k && j<=i;j++) { int r=i-1; int l=j-1; int p=0; if(l==r) { dp[i][j]=dp[i-1][j-1]+(cum1[i]-cum1[i-1])*cum2[i+1]; continue; } while(r>=l) { int mid1 = l+(r-l)/3; int mid2 = r-(r-l)/3; if(dp[mid1][j-1]+(cum1[i]-cum1[mid1])*cum2[i+1]>dp[mid2][j-1]+(cum1[i]-cum1[mid2])*cum2[i+1]) { r=mid2-1; p=mid1; } else { p=mid2; l=mid1+1; } } //cout<<i<<" "<<j<<endl; dp[i][j]=dp[p][j-1]+(cum1[i]-cum1[p])*cum2[i+1]; } } ll mx=0,st; for(int i=1;i<=n;i++) { if(dp[i][k]>mx) { mx=dp[i][k]; st=i; } } cout<<mx<<endl; int cur=mx; cout<<st<<" "; int d=1; while(k>1) { for(int i=st-1;i>0;i--) { if(dp[i][k-1]+(cum1[st]-cum1[i])*cum2[st+1]==cur) { cur=dp[i][k-1]; cout<<i<<" "; st=i; k--; } } } //for(int i=1;i<=10;i++)cout<<dp[i][3]+(cum1[11]-cum1[i])*cum2[12]<<" "<<dp[i][3]<<endl; return 0; }

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

sequence.cpp: In function 'int main()':
sequence.cpp:89:6: warning: unused variable 'd' [-Wunused-variable]
  int d=1;
      ^
#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...