목차

입대

ps
링크acmicpc.net/…
출처BOJ
문제 번호31413
문제명입대
레벨골드 3
분류

DP

시간복잡도O(n^2)
인풋사이즈n<=1000
사용한 언어Python 3.11
제출기록31120KB / 316ms
최고기록316ms
해결날짜2024/02/23
출처

제3회 보라매컵 본선 Open Contest - D

풀이

코드

"""Solution code for "BOJ 31413. 입대".

- Problem link: https://www.acmicpc.net/problem/31413
- Solution link: http://www.teferi.net/ps/problems/boj/31413

Tags: [dp]
"""


def main():
    N, M = [int(x) for x in input().split()]
    s = [int(x) for x in input().split()]
    A, D = [int(x) for x in input().split()]

    v = 0
    dp_cur = [v := v + s_i for s_i in reversed(s)][::-1]
    if dp_cur[0] >= M:
        print('0')
        return

    for j in range(1, N + 1):
        dp_prev, dp_cur = dp_cur, [None] * N
        dp_cur[N - 1] = max(s[N - 1], A)
        for i in reversed(range(N - 1)):
            if i + D < N:
                dp_cur[i] = max(dp_cur[i + 1] + s[i], dp_prev[i + D] + A)
            else:
                dp_cur[i] = max(dp_cur[i + 1] + s[i], A)
        if dp_cur[0] >= M:
            print(j)
            break
    else:
        print('-1')


if __name__ == '__main__':
    main()