#include<iostream>
#include<algorithm>
using namespace std;
int main(){
long long n=0,a[5001]={0},ans=0;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
// 以上为输入
long long sum=0,b[5001]={0};
for(int i=0;i<n;i++){//i=>0的位置
b[i]=0,sum=0;
for(int j=i;j>0;j--){//0左边
b[j-1]=0;
if(b[j-1]>=b[j]){
b[j-1]-=(abs(b[j])/a[j-1]+1)*a[j-1];
sum+=(abs(b[j])/a[j-1]+1);
}
}
for(int j=i;j<n-1;j++){//0右边
b[j+1]=0;
if(b[j+1]<=b[j]){
b[j+1]+=(b[j]/a[j+1]+1)*a[j+1];
sum+=(b[j]/a[j+1]+1);
}
}
if(i) ans=min(ans,sum);//找最优
else ans=sum;
}
cout<<ans;
return 0;
}
优化了一下,b[n]用b替代
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n=0;
long long a[5001]={0},ans=0;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
// 以上为输入
for(int i=0;i<n;i++){//i=>0的位置
long long sum=0,b=0;
for(int j=i;j>0;j--){//0左边
sum+=abs(b)/a[j-1]+1;
b=(abs(b)/a[j-1]+1)*a[j-1];
}
b=0;
for(int j=i;j<n-1;j++){//0右边
sum+=(b/a[j+1]+1);
b=(b/a[j+1]+1)*a[j+1];
}
if(i) ans=min(ans,sum);//
else ans=sum;
}
cout<<ans;
return 0;
}