https://www.acmicpc.net/problem/2240
2240번: 자두나무
자두는 자두를 좋아한다. 그래서 집에 자두나무를 심어두고, 여기서 열리는 자두를 먹고는 한다. 하지만 자두는 키가 작아서 자두를 따먹지는 못하고, 자두가 떨어질 때까지 기다린 다음에 떨어
www.acmicpc.net
'''
자두가 떨어지는 시간 T초
자두의 최대 움직임 횟수 W번
두 개의 나무에서 자두가 떨어짐(지금은 1번에 있음)
자두가 받을 수 있는 자두의 최대 개수?
이동 횟수가 홀수->현재위치 2번->2번나무 떨어진거 먹을 수 있음
이동 횟수가 짝수->현재위치 1번->1번나무 떨어진거 먹을 수 있음
현재위치와 지금 떨어지는 나무가 다를 땐 먹을 수 없음
'''
import sys
input = sys.stdin.readline
T, W = map(int,input().split())
lst = [0] + [int(input()) for _ in range(T)]
dp = [[0] * (W+1) for _ in range(T+1)]
for i in range(T+1):
# 1번 나무에 그대로 있는 경우
if lst[i] == 1: # 1번 나무에서 자두가 떨어짐
dp[i][0] = dp[i-1][0] + 1
else: # 2번 나무에서 자두가 떨어짐
dp[i][0] = dp[i-1][0]
# 1번 이상 움직이는 경우
for j in range(1,W+1):
# 현재 n번 나무인데 i초에 n번 나무에서 자두가 떨어짐
if (lst[i] == 1 and j % 2 == 0) or (lst[i] == 2 and j % 2 == 1):
# 움직일 것인지 현재 위치에서 받을 것인지
dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j]) + 1
# i초에 떨어지는 위치와 현재 위치 다름
else:
dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j])
print(max(dp[T]))
'백준' 카테고리의 다른 글
백준 9655. 돌 게임 (0) | 2024.03.19 |
---|---|
백준 11650. 좌표 정렬하기 (0) | 2024.03.17 |
백준 11727. 2xn 타일링 2 (0) | 2024.03.15 |
백준 1439. 뒤집기 (0) | 2024.03.15 |
백준 1932. 정수 삼각형 (0) | 2024.03.13 |