#include #include using namespace std; const int inf = 987654321; const int invalid = -1; int main(void) { int n; scanf("%d", &n); vector s(n+1); for(int i=0; i<=n; i++) { scanf("%d", &s[i]); } vector> dp(n+1, vector(s[n]+1)); for(int i=0; i<=n; i++) { for(int j=0; j<=s[i]; j++) { dp[i][j] = inf; } for(int j=s[i]+1; j<=s[n]; j++) { dp[i][j] = invalid; } } for(int i=0; i<=n; i++) { dp[i][0] = i + 1; } for(int j=0; j<=s[0]; j++) { dp[0][j] = j + 1; } // i番目の進化状態, j個の潜在能力 // dp[i番目の進化状態で][j個の潜在能力のカードを作るには] = 最低これだけ要る for(int i=1; i<=n; i++) { for(int j=1; j<=s[i]; j++) { if(dp[i][j] == invalid) { continue; } // 進化させる if(dp[i-1][j] != invalid) { dp[i][j] = dp[i-1][j] + 1; } // 強化する for(int p=0; p