다이나믹 프로그래밍 2
복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법
수열
10
20
10
30
20
50
풀어볼 문제
Last updated
복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법
Last updated
x = int(input())
arr = list(map(int, input().split()))
dp = [1 for i in range(x)]
for i in range(x):
for j in range(i):
if arr[i] > arr[j]:
#증가하기만 하면 일단 갱신시켜본다.
dp[i] = max(dp[i], dp[j]+1)
print(max(dp))n=int(input())
A=list(map(int,input().split()))
#LIS 로직
dp=[1]*n
for i in range(1,n):
for j in range(i):
if A[i]>A[j]: dp[i]=max(dp[i],dp[j]+1)
ans=[]
std=max(dp)
print(std)
for i in range(n-1,-1,-1):
if dp[i]==std:
ans.append(A[i])
std-=1
for i in ans[::-1]:
print(i,end=' ')
A=input()
B=input()
dp=[[0]*1001 for _ in range(1001)]
ans=0
for i in range(1, len(A)+1):
for j in range(1, len(B)+1):
if A[i-1]==B[j-1]: dp[i][j]=dp[i-1][j-1]+1
else: dp[i][j]=max(dp[i-1][j],dp[i][j-1])
ans=max(ans, dp[i][j])
print(ans)