https://www.acmicpc.net/problem/2240
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import sys
from itertools import combinations
input = sys.stdin.readline
T, W = map(int, input().split())
tree = [0] + [int(input())-1 for t in range(T)]
dp = [[0] * (W + 1) for _ in range(T + 1)] # W * T의 배열
for i in range(1, T+1):
# 전혀 움직이지 않았을 경우 초기화
if tree[i] == 0:
dp[i][0] = dp[i-1][0] + 1
else:
dp[i][0] = dp[i-1][0]
for j in range(1, W+1):
# w번 움직이므로 2로 남은 나머지는 위치와 동일함
if tree[i] == j % 2: # 먹는 경우
# 과거의 위치에서 움직여서 먹는 경우, 현재의 위치에서 움직이지 않고 먹는 경우
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + 1
else: # 먹지 못하는 경우
# 과거의 위치에서 움직여서 먹지 못한는 경우, 현재 위치에서 먹지 못하는 경우
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j])
print(max(dp[T]))
|
cs |
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[시뮬레이션] BOJ 17144 미세먼지 안녕! (0) | 2023.07.13 |
---|---|
[BFS] BOJ 7576 토마토 (0) | 2023.07.11 |
[백트래킹, 시뮬레이션] BOJ 12100 2048(easy) (0) | 2023.07.06 |
[그래프] BOJ 4195 친구 네트워크 (0) | 2023.07.01 |
[플로이드-워샬] 프로그래머스 순위 (0) | 2023.06.30 |