This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<stdio.h>
#include<iostream>
using namespace std;
typedef long long int lld;
#define INF 1000000000000000000
lld DP[100010][210];
lld sq(lld x){
return x*x;
}
int best[100010][210];
lld acc[100010];
void computeDP(int a, int b,int parts, int l,int r){
if(a>b)return;
int mid=(a+b)/2;
for(int i=l;i<=min(r,mid);i++){
if(DP[mid][parts]>DP[i][parts-1]+sq(acc[i]-acc[mid])){
best[mid][parts]=i;
DP[mid][parts]=DP[i][parts-1]+sq(acc[i]-acc[mid]);
}
}
computeDP(a,mid-1,parts,l,best[mid][parts]);
computeDP(mid+1,b,parts,best[mid][parts],r);
}
int main(){
int n,k;
scanf("%d %d",&n,&k);
//cin>>n>>k;
lld arr[n];
for(int i=0;i<n;i++){
scanf("%lld",&arr[i]);
//cin>>arr[i];
}
acc[0]=0;
for(int i=0;i<n;i++){
acc[i+1]=acc[i]+arr[i];
}
for(int i=0;i<=n;i++){
for(int j=0;j<=k+1;j++){
DP[i][j]=INF;
}
}
DP[0][0]=0;
/*for(int parts=0;parts<=k;parts++){
for(int i=0;i<n;i++){
for(int j=i+1;j<=n;j++){
if(DP[j][parts+1]>DP[i][parts]+sq(acc[j]-acc[i])){
DP[j][parts+1]=DP[i][parts]+sq(acc[j]-acc[i]);
prev[j][parts+1]=i;
}
}
}
}*/
/*for(int parts=0;parts<=k+1;parts++){
for(int i=0;i<=n;i++){
printf("%d ",prev[i][parts]);
}printf("\n");
}*/
for(int i=1;i<=k+1;i++){
computeDP(0,n,i,0,n);
}
lld ans=sq(acc[n])-DP[n][k+1];
ans/=2;
printf("%lld\n",ans);
//cout<<ans<<endl;
int index=n;
int partition=k+1;
while(partition>0){
index=best[index][partition];
partition--;
if(index>0){
printf("%d ",index);
//cout<<index<<" ";
}
}//cout<<endl;
printf("\n");
return 0;
}
Compilation message (stderr)
sequence.cpp: In function 'int main()':
sequence.cpp:26:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d",&n,&k);
~~~~~^~~~~~~~~~~~~~~
sequence.cpp:30:12: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld",&arr[i]);
~~~~~^~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |