2240-g4 성공
This commit is contained in:
48
workbook_7319/gold/2240-g4.py
Normal file
48
workbook_7319/gold/2240-g4.py
Normal file
@@ -0,0 +1,48 @@
|
||||
# 자두나무
|
||||
|
||||
import sys
|
||||
|
||||
input = sys.stdin.readline
|
||||
|
||||
def solution():
|
||||
t, w = map(int, input().rstrip().split())
|
||||
|
||||
plum = [0] * (t+1)
|
||||
for i in range(1, t+1):
|
||||
plum[i] = int(input().rstrip())
|
||||
|
||||
dp = [[0] * (t+1) for _ in range(w+1)]
|
||||
|
||||
for i in range(1, t+1):
|
||||
dp[0][i] = dp[0][i-1]
|
||||
if plum[i] == 1:
|
||||
dp[0][i] += 1
|
||||
|
||||
for i in range(1, w+1):
|
||||
for j in range(1, t+1):
|
||||
dp[i][j] = max(dp[i][j-1], dp[i-1][j-1])
|
||||
if (plum[j] == 1 and i%2 == 0) or (plum[j] == 2 and i%2 == 1):
|
||||
dp[i][j] += 1
|
||||
|
||||
|
||||
result = 0
|
||||
for i in range(w+1):
|
||||
result = max(result, dp[i][t])
|
||||
|
||||
print(result)
|
||||
|
||||
return
|
||||
|
||||
|
||||
solution()
|
||||
|
||||
"""
|
||||
걸린 시간: 40분
|
||||
|
||||
시간 복잡도: w*t의 테이블을 채워야 하기 때문에 O(w*t)이다.
|
||||
|
||||
해설: 현재의 상황은 몇번째 이동한 상황인지로 나뉘고, w만큼 이동했을 때 t초의 상황은 이번에 움직였거나, 이번에 안 움직였거나이다.
|
||||
따라서 dp[w][t] = max(dp[w][t-1], dp[w-1][t-1]) 이다.
|
||||
이때, w가 홀수면 2번, 짝수면 1번 나무에 있는 것이므로 t초에 떨어질 나무와 w의 홀짝 여부가 맞으면 +1을 해줘야한다.
|
||||
그리고 t초의 최대값은 이동을 얼마나 했을 때인지 모르기 때문에 마지막에 t초의 전체 w에 대해 최대값을 구해야한다.
|
||||
"""
|
||||
Reference in New Issue
Block a user