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

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

타일 밟기

면접 대비

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

요약
서로 다른 증가하는 수 N개가 주어질 때, 공차가 같은 3개 이상의 등차 부분수열 중 합이 최대인 것을 구하고 없으면 0을 출력한다.
난이도

보통10점 중 6점

유형
동적 계획법, 해시맵, 수학, 배열
정답자
아직 제출이 없습니다

문제

경시장으로 가는 길에, 자연수가 하나씩 적힌 타일이 한 줄로 놓여 있다. 타일에 적힌 수들은 모두 서로 다르며, 줄의 처음부터 끝까지 증가하는 순서로 놓여 있다.

철수는 이 타일들 중 하나에서 출발하여, 몇 개의 타일을 밟으며 경시장으로 가려고 한다. 이때 밟는 타일에 적힌 수들이 일정한 자연수 dd(d≥1d \ge 1)만큼씩 커지도록 밟는다. 즉, 밟는 수들은 공차가 dd인 등차수열을 이루어야 한다.

출발하는 타일과 공차 dd를 어떻게 고르느냐에 따라 연속해서 밟을 수 있는 타일의 개수가 달라진다. 철수는 이렇게 밟은 타일에 적힌 수들의 합 중 최댓값이 얼마인지 알고 싶어 한다. 단, 연속해서 밟는 타일은 적어도 33개 이상이어야 한다.

예를 들어 타일에 적힌 수들이 다음과 같다고 하자.

1, 2, 6, 7, 11, 12, 13, 15, 17, 20, 23

이때 33개 이상 연속해서 밟을 수 있는 모든 경우는 다음 표와 같다.

공차 dd밟은 타일의 순서합
111, 12, 1336
211, 13, 15, 1756
317, 20, 2360
47, 11, 1533
51, 6, 1118
52, 7, 12, 1738
61, 7, 1321
611, 17, 2351
76, 13, 2039
87, 15, 2345
92, 11, 2033
111, 12, 2336

이 중 합이 가장 큰 경우는 17,20,2317, 20, 23(d=3d = 3)이며, 그 합은 6060이다.

타일에 적힌 수들이 증가하는 순서로 주어질 때, 위와 같은 방법으로 33개 이상 연속해서 밟을 수 있는 타일에 적힌 수들의 합 중 최댓값을 구하는 프로그램을 작성하여라. 33개 이상 연속해서 밟을 수 있는 경우가 존재하지 않으면 00을 출력한다.

입력

첫째 줄에 타일의 개수 NN이 주어진다. (3≤N≤3 0003 \le N \le 3\,000)

둘째 줄에 NN개의 타일에 적힌 자연수가 증가하는 순서로 공백으로 구분되어 주어진다. 각 수는 1 000 0001\,000\,000 이하이며, 모두 서로 다르다.

출력

33개 이상 연속해서 밟을 수 있는 타일이 존재하면, 그렇게 밟은 타일에 적힌 수들의 합 중 최댓값을 첫째 줄에 출력한다. 그러한 경우가 존재하지 않으면 00을 출력한다.

예제4

  1. 예제 1

    입력
    11
    1 2 6 7 11 12 13 15 17 20 23
    
    예상 출력
    60
    
  2. 예제 2

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

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

    입력
    5
    2 4 6 8 10
    
    예상 출력
    30