import sys sys.setrecursionlimit(10 ** 6) def II(): return int(sys.stdin.readline()) def LI(): return list(map(int, sys.stdin.readline().split())) def main(): inf = 10 ** 9 n = II() ss = LI() # dp[i][j]...レベルiで能力をj個持つために必要な最小枚数 dp = [[inf] * (ss[-1] + 1) for _ in range(n + 1)] dp[0][0] = 1 for i in range(n + 1): dpi = dp[i] for j in range(ss[i] + 1): if (i, j) == (0, 0): continue # 強化の場合 if j: v = min(dpi[a] + dpi[j - 1 - a] for a in range((j + 2) // 2)) else: v = inf # 進化の場合 if i: v = min(v, dp[i - 1][j] + 1) dpi[j] = v print(*dp[n]) main()