#include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long int; #define chmax(x,y) (x) = ((x) > (y)) ? (x) : ((x) = (y)); #define chmin(x,y) (x) = ((x) < (y)) ? (x) : ((x) = (y)); const int INF = 1e9; const ll INFL = 1e18; const int Mod = 1e9 + 7; const int dx[] = {0,1,0,-1}; const int dy[] = {1,0,-1,0}; int main(int argc, char const *argv[]) { int N; cin >> N; vector A(N); for(auto &a : A)cin >> a; vector>> dp(2,vector>(N+1,vector(N+1,INFL))); dp[0][1][N] = A[0]; dp[1][0][N-1] = A[N-1]; for(int len = N;len > 0;--len) { for(int i=0;i N)continue; if(i > 0) { chmin(dp[0][i+1][i+len],max(dp[0][i][i+len]+1,A[i])); chmin(dp[1][i][i+len-1],max(dp[0][i][i+len]+len,A[i+len-1])); // std::cout << dp[0][i+1][i+len] << " " << i+1 << " " << i+len << std::endl; std::cout << dp[1][i][i+len-1] << std::endl; } if(i+len < N) { chmin(dp[1][i][i+len-1],max(dp[1][i][i+len]+1,A[i+len-1])); chmin(dp[0][i+1][i+len],max(dp[1][i][i+len]+len,A[i])); } } } ll answer = INFL; for(int i=0;i