에서 풀다【초중급자가 풀어야 할 과거문정선 100문】(053 - 055 동적계획법:기타)
1. 목적
초중급자가 풀어야 할 과거문정선 100문을 파이썬으로 푸십시오.
모두 풀이 끝날 무렵에 하늘색이 되어 있는 것이 목표입니다.
본 기사는 「053 - 055 동적 계획법:기타」입니다.
2. 총괄
「기타」라고 있는 바와 같이 이 3문문은 지금까지의 dp
와는 조금 지향(기호?)가 달라, dp
답지 않다 dp
라고 느꼈습니다.
3. 본편
053 - 055 동적 계획법 : 기타
053. DPL_1_D - 최장 증가 부분 열
답변
import bisect
n = int(input())
A = [int(input()) for _ in range(n)]
dp = [A[0]]
for i in range(1, n):
if A[i] > dp[-1]:
dp.append(A[i])
else:
ind = bisect.bisect_left(dp, A[i])
dp[ind] = A[i]
print(len(dp))
이분 탐색과 DP로 해결합니다.
dp
에 오름차순으로 A
요소를 순서대로 추가합니다.
구체적으로는
「기타」라고 있는 바와 같이 이 3문문은 지금까지의
dp
와는 조금 지향(기호?)가 달라, dp
답지 않다 dp
라고 느꼈습니다.3. 본편
053 - 055 동적 계획법 : 기타
053. DPL_1_D - 최장 증가 부분 열
답변
import bisect
n = int(input())
A = [int(input()) for _ in range(n)]
dp = [A[0]]
for i in range(1, n):
if A[i] > dp[-1]:
dp.append(A[i])
else:
ind = bisect.bisect_left(dp, A[i])
dp[ind] = A[i]
print(len(dp))
이분 탐색과 DP로 해결합니다.
dp
에 오름차순으로 A
요소를 순서대로 추가합니다.
구체적으로는
import bisect
n = int(input())
A = [int(input()) for _ in range(n)]
dp = [A[0]]
for i in range(1, n):
if A[i] > dp[-1]:
dp.append(A[i])
else:
ind = bisect.bisect_left(dp, A[i])
dp[ind] = A[i]
print(len(dp))
A
요소 A[i]
소개 dp
의 마지막 요소보다 큰 것은 dp
에 추가 dp
안에 A[i]
이상의 숫자가 존재하므로 A[i]
로 바꿉니다 dp
의 길이가 대답입니다.
054. AtCoder Beginner Contest 006 D - 카드놀이 삽입 정렬
답변
import bisect
N = int(input())
C = [int(input()) for _ in range(N)]
dp = [C[0]] # 初期値
for i in range(1, N):
if C[i] > dp[-1]:
dp.append(C[i])
else:
ind = bisect.bisect_left(dp, C[i])
dp[ind] = C[i]
print(N - len(dp))
DPL_1_D - 최장 증가 부분 열 과 거의 같습니다.
차이는 마지막
print(N - len(dp))
.트럼프를 삽입하는 데 필요한 횟수는 트럼프의 수에서 가장 긴 증가 부분 열의 길이를 뺀 수입니다.
055. AtCoder Beginner Contest 134 E - Sequence Decomposing
답변
import bisect
from collections import deque
N = int(input())
A = [int(input()) for _ in range(N)]
dp = deque()
dp.append(A[0])
for i in range(1, N):
ind = bisect.bisect_left(dp, A[i])
if ind == 0:
dp.appendleft(A[i])
else:
dp[ind-1] = A[i]
print(len(dp))
위의 두 가지 문제에서 조금만 생각을 바꿉니다.
상기 2개의 문제에서는,
dp
의 최대치 이상의 요소를 append
하고 있었습니다만,이번에는 최소값 이하의 요소를
appendleft
합니다.
Reference
이 문제에 관하여(에서 풀다【초중급자가 풀어야 할 과거문정선 100문】(053 - 055 동적계획법:기타)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/K_SIO/items/ba2714b16163bac07266텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)