Submission #59604

#TimeUsernameProblemLanguageResultExecution timeMemory
59604KLPPSplit the sequence (APIO14_sequence)C++14
0 / 100
2053 ms8264 KiB
#include<stdio.h> #include<iostream> using namespace std; typedef long long int lld; #define INF 1000000000000000000 lld sq(int x){ return x*x; } int main(){ int n,k; scanf("%d %d",&n,&k); lld arr[n]; for(int i=0;i<n;i++){ scanf("%lld",&arr[i]); } lld DP[n+1][k+2]; int prev[n+1][k+2]; lld acc[n+1]; 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; prev[i][j]=-1; } } 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"); }*/ lld ans=sq(acc[n])-DP[n][k+1]; ans/=2; printf("%lld\n",ans); int index=n; int partition=k+1; while(index>0){ index=prev[index][partition]; partition--; if(index>0)printf("%d ",index); } printf("\n"); return 0; }

Compilation message (stderr)

sequence.cpp: In function 'int main()':
sequence.cpp:11: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:14:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld",&arr[i]);
   ~~~~~^~~~~~~~~~~~~~~~
#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...