탑 쌓기
시간 제한1초메모리 제한128 MB
벽돌 너비 수열을 연속한 구간으로 나누어 아래층부터 위층으로 갈수록 구간 합이 커지지 않게 할 때, 만들 수 있는 층의 최대 개수를 구한다.
문제
바이트아저(Byteasar)는 벽돌 개를 사서 번부터 번까지 번호를 매겼습니다. 모든 벽돌의 높이는 같지만 너비는 다를 수 있으며, 번 벽돌의 너비는 입니다.
바이트아저는 다음 규칙에 따라 모든 벽돌을 여러 층으로 쌓아 탑을 만들려고 합니다.
- 각 층은 하나 이상의 벽돌로 이루어지며, 한 층의 너비는 그 층에 놓인 벽돌들의 너비 합입니다.
- 맨 아래층에서 위로 올라가면서 볼 때, 각 층의 너비는 바로 아래 층의 너비보다 클 수 없습니다. 즉 층의 너비는 아래에서 위로 갈수록 증가하지 않습니다.
- 벽돌은 번호 순서를 지켜야 합니다. 어떤 벽돌도 자신보다 번호가 큰 벽돌보다 더 높은 층에 놓일 수 없습니다. 다시 말해 각 층은 번호가 연속된 벽돌들의 묶음이며, 위로 올라갈수록 번호가 커집니다.
- 모든 벽돌을 반드시 사용해야 합니다.
탑의 높이는 층의 개수입니다. 바이트아저가 쌓을 수 있는 탑의 최대 높이를 구하세요.
입력
첫째 줄에 벽돌의 개수 ()이 주어집니다. 둘째 줄에 개의 정수 ()이 주어지며, 는 번 벽돌의 너비입니다.
출력
쌓을 수 있는 탑의 최대 높이를 정수 하나로 출력합니다.
힌트
너비가 각각 , , 인 벽돌 세 개를 생각해 봅시다. 번과 번 벽돌을 맨 아래층에 놓으면 그 층의 너비는 이고, 번 벽돌을 맨 위층에 놓으면 그 층의 너비는 입니다. 은 을 넘지 않으므로 이 탑은 규칙을 만족하며, 높이는 가 됩니다.