36分代码
f[i][j] =min(f[j-1][k]+ pow(s[i]-s[j]) )
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=403; #define int long long int a[N],s[N],n,f[N][N]; int pow(int x){ return x*x; } void solve(){ int i,j; memset(f,127,sizeof f); for(i=1;i<=n;i++){ f[i][1]=pow(s[i]); for(j=2;j<=i;j++) for(int k=1;k<j;k++) if(s[i]-s[j-1]>=s[j-1]-s[k-1]) f[i][j]=min(f[i][j],f[j-1][k]+pow(s[i]-s[j-1])); } int ans=f[0][0]; for(i=1;i<=n;i++) ans=min(ans,f[n][i]); cout<<ans<<endl; } signed main(){ int tp; cin>>n>>tp; for(int i=1;i<=n;i++) cin>>a[i],s[i]=s[i-1]+a[i]; solve(); }