File tree Expand file tree Collapse file tree 1 file changed +34
-0
lines changed
Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Original file line number Diff line number Diff line change 1+ from sys import stdin
2+
3+ T , W = map (int , stdin .readline ().split ())
4+
5+
6+ lst = [0 ]
7+ dp = [[0 ]* (W + 1 ) for _ in range (T + 1 )]
8+
9+ # 입력 받기
10+ for _ in range (T ):
11+ lst .append (int (stdin .readline ()))
12+
13+ # DP 테이블 채우기
14+ for i in range (1 , T + 1 ):
15+ if lst [i ] == 1 :
16+ # 이동을 한 번도 안 했을 경우 (항상 1번 나무 아래 있음)
17+ dp [i ][0 ] = dp [i - 1 ][0 ] + 1 # 자두 먹으면 +1
18+ else :
19+ # 1번 나무 아래 있는데 2번 나무에서 자두 떨어지면 못 먹음
20+ dp [i ][0 ] = dp [i - 1 ][0 ]
21+
22+ # 이동 횟수 1회 이상부터
23+ for j in range (1 , W + 1 ):
24+ if lst [i ] == 2 and j % 2 == 1 :
25+ # 홀수번 이동했을 때는 2번 나무 아래 있음 → 2번 나무에서 자두 떨어지면 +1
26+ dp [i ][j ] = max (dp [i - 1 ][j - 1 ], dp [i - 1 ][j ]) + 1
27+ elif lst [i ] == 1 and j % 2 == 0 :
28+ # 짝수번 이동했을 때는 1번 나무 아래 있음 → 1번 나무에서 자두 떨어지면 +1
29+ dp [i ][j ] = max (dp [i - 1 ][j - 1 ], dp [i - 1 ][j ]) + 1
30+ else :
31+ # 자두 못 먹을 경우, 이동하거나 이동 안 하거나 둘 중 최대값만 가져오기
32+ dp [i ][j ] = max (dp [i - 1 ][j - 1 ], dp [i - 1 ][j ])
33+
34+ print (max (dp [- 1 ]))
You can’t perform that action at this time.
0 commit comments