/* -*- coding: utf-8 -*- * * 266.cc: No.266 最終進化を目指せ - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 10; const int MAX_S = 10; const int INF = 1 << 30; /* typedef */ /* global variables */ int ss[MAX_N + 1]; int dp[MAX_N + 1][MAX_S + 1]; /* subroutines */ /* main */ int main() { int n; cin >> n; for (int i = 0; i <= n; i++) cin >> ss[i]; for (int i = 0; i <= n; i++) for (int j = 0; j <= MAX_S; j++) dp[i][j] = INF; dp[0][0] = 1; for (int i = 0; i <= n; i++) { int &si = ss[i]; for (int j = 0; j <= si; j++) { if (i > 0) dp[i][j] = dp[i - 1][j] + 1; if (j > 0) { for (int k = 0; k < j; k++) { int d = dp[i][k] + dp[i][j - 1 - k]; if (dp[i][j] > d) dp[i][j] = d; } } } } for (int i = 0; i <= ss[n]; i++) { if (i) putchar(' '); printf("%d", dp[n][i]); } putchar('\n'); return 0; }