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();
}
浙公网安备 33010602011771号