#include typedef long long ll; typedef unsigned long long ull; #define FOR(i,a,b) for(int (i)=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define RANGE(vec) (vec).begin(),(vec).end() using namespace std; class FinalEvolution { public: void solve(void) { int N; cin>>N; int M = N+1; vector S(M); int maxS = 0; REP(i,M) { cin>>S[i]; maxS = max(maxS, S[i]); } // dp[i][j] := i 番目のカードの覚醒数を j にするために必要な最低限の数 vector> dp(M,vector(maxS+1,1<<30)); dp[0][0] = 1; REP(i,M) REP(j,S[i]+1) { if ( i >= 1 ) dp[i][j] = dp[i-1][j]+1; REP(k,j) dp[i][j] = min(dp[i][j], dp[i][j-k-1] + dp[i][k]); } REP(i,S[N]+1) { cout<solve(); delete obj; return 0; } #endif