#include using namespace std; #define FOR(i,a,b) for (int i=(a);i<(b);i++) #define RFOR(i,a,b) for (int i=(b)-1;i>=(a);i--) #define REP(i,n) for (int i=0;i<(n);i++) #define RREP(i,n) for (int i=(n)-1;i>=0;i--) typedef long long LL; int N; LL A[2001]; LL dp[2001][2001]; LL m=0; //左→右 LL lr(int x,int y){ LL ans=A[x]; for(int i=x+1;i<=y;i++){ ans=max(ans+1,A[i]); } return ans; } //右→左 LL rl(int x,int y){ LL ans=A[x]; for(int i=x-1;i>=y;i--){ ans=max(ans+1,A[i]); } return ans; } LL solve_right(int r,int l); LL solve_left(int l,int r){ if(dp[l][r]!=-1)return dp[l][r]; if(l==r)return A[l]; LL ans=1000000000000; LL calc=lr(l,r); ans=calc; if(A[l]+2*(r-l)-1<=m){ ans=min(ans,solve_left(l+1,r)); ans=min(ans,solve_right(r,l+1)); } if(A[l]+(r-l)<=A[r])ans=min(ans,solve_right(r,l+1)); dp[l][r]=ans; // cout<<"l:r="<>N; REP(i,N){ cin>>A[i]; m=max(m,A[i]); } cout<