#include<bits/stdc++.h>
using namespace std;
long long f[1001][1001];//f[i][j]表示当前位置为i,本次移动移动了j格
int a[1001];//第i个格子的花费
long long ans,n;
int main(){
ans=0x7f7f7f7f;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
memset(f,0x7f,sizeof(f));
f[1][0]=0;//初始化设置
for(int j=1;j<=n-1;j++){
for(int i=n;i>=1;i--){
if(i>j)f[i][j]=min(f[i][j],f[i-j][j-1]);//当这个格子能从前前进到达时,更新此时数组值
if(i+j<=n)f[i][j]=min(f[i][j],f[i+j][j]);//当这个格子能从后倒退到达时,更新此时数组值
if(f[i][j]<0x7fffffff){//若以上任意两种情况满足一种及以上,加上花费
f[i][j]+=a[i];
}
if(i==n){//更新答案
if(f[i][j]<ans)ans=f[i][j];
}
}
}
cout<<ans;
return 0;
}
注!!!
“//”为注释哦!!