아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

도미노 넘어뜨리기

면접 대비

시간 제한1초메모리 제한512 MB

요약
일렬로 놓인 N개의 무게가 있는 도미노에서 일부를 제거해, 첫 도미노부터 차례로 넘어질 때 각 도미노의 무게가 앞서 넘어진 무게의 합 이하가 되도록 남길 수 있는 최대 개수를 구한다.
난이도

보통10점 중 6점

유형
동적 계획법, 그리디, 정렬, 누적 합
정답자
아직 제출이 없습니다

문제

NN개의 도미노가 일렬로 세워져 있다. 도미노에는 무게가 존재하는데, ii번째 도미노의 무게는 a_ia\_i이다. 단현이는 NN개의 도미노 중 일부 도미노를 제거할 수 있다. 만약 남은 도미노에서 ii번째 도미노를 제거하면 ii번째 도미노의 양옆의 도미노가 이웃하게 된다.

단현이는 이렇게 일부를 제거하고 남은 도미노가 완벽하게 나열되도록 만들고 싶다. 도미노가 완벽하게 나열되었다는 것은, 나열된 도미노에서 첫 번째 도미노를 넘어뜨렸을 때 마지막 도미노까지 차례로 넘어진다는 것을 의미한다.

일부를 제거하고 남은 MM개의 도미노에서 jj번째 도미노의 무게를 b_jb\_j라고 하자. j(2≤ j≤M)j(2 \le \ j \le M)번째 도미노가 넘어지기 위해서는 첫 번째 도미노부터 j−1j - 1번째 도미노까지 모두 넘어져야 하고, 넘어진 도미노의 무게를 합한 값이 b_jb\_j보다 크거나 같아야 한다.

단현이는 NN개의 도미노에서 일부 도미노를 제거해서 완벽하게 나열되도록 만들고 싶다. 완벽하게 나열할 수 있는 도미노의 최대 개수는 얼마일까?

입력

첫째 줄에 도미노의 개수 N(1≤N≤1 000)N(1\le N \le 1\ 000)이 주어진다.

둘째 줄에 정수 a_1,a_2,...,a_Na\_1, a\_2, ... , a\_N이 주어진다. a_i(1≤a_i≤1 000 000)a\_i(1 \le a\_i \le 1\ 000\ 000)는 ii번째 도미노의 무게이다.

출력

완벽하게 나열할 수 있는 도미노의 최대 개수를 출력한다.

예제3

  1. 예제 1

    입력
    5
    2 1 6 5 4
    
    예상 출력
    3
    
  2. 예제 2

    입력
    4
    3 1 2 6
    
    예상 출력
    4
    
  3. 예제 3

    입력
    3
    1 2 3
    
    예상 출력
    1