Hits

안녕하세요. 모카의 머신러닝 입니다. 이번 포스팅에서는 백준 알고리즘 문제 풀이에 대해 포스팅하도록 하겠습니다.


코드는 이곳을 참고했음을 밝힙니다.


1. 동적 계획법 4

백준 11049번

https://www.acmicpc.net/problem/11049

import sys
input = sys.stdin.readline
N = int(input())
M = []
D = [[-1 for j in range(N+1)] for i in range(N+1)]

M.append((0,0))

for i in range(N):
    x, y = map(int, input().split())
    M.append((x, y))
    
def execute(s, e):
    result = sys.maxsize
    if D[s][e] != -1:
        return D[s][e]
    if s==e:
        return 0
    if s+1==e:
        return M[s][0] * M[s][1] * M[e][1]
    for i in range(s, e):
        result = min(result, M[s][0]*M[i][1]*M[e][1] + execute(s, i) + execute(i+1, e))
    D[s][e] = result
    return D[s][e]

print(execute(1, N))


백준 2098번

https://www.acmicpc.net/problem/2098

import sys
input = sys.stdin.readline
N = int(input())
W = []

for i in range(N):
    W.append([])
    W[i] = list(map(int, input().split()))

D = [[0 for j in range(1<<16)] for i in range(16)]

def tsp(c, v):
    if v == (1<<N) - 1:
        if W[c][0] == 0:
            return float('inf')
        else:
            return W[c][0]
    if D[c][v] != 0:
        return D[c][v]
    min_val = float('inf')
    for i in range(0, N):
        if (v& (1<<i)) ==0 and W[c][i] != 0:
            min_val = min(min_val, tsp(i, (v|(1<<i))) + W[c][i])
    D[c][v] = min_val
    return D[c][v]

print(tsp(0, 1))


백준 14003번

https://www.acmicpc.net/problem/14003

import sys
input = sys.stdin.readline
N = int(input())
A = list(map(int, input().split()))
A.insert(0, 0)

index = 0
maxLength = 1
B = [0] * 1000001
D = [0] * 1000001
ans = [0] * 1000001
B[maxLength] = A[1]
D[1] = 1

def binarysearch(l, r, now):
    while l<r:
        mid = (l+r) // 2
        if B[mid] < now:
            l = mid + 1
        else:
            r = mid
    return l

for i in range(2, N+1):
    if B[maxLength] < A[i]:
        maxLength += 1
        B[maxLength] = A[i]
        D[i] = maxLength
    else:
        index = binarysearch(1, maxLength, A[i])
        B[index] = A[i]
        D[i] = index

print(maxLength)
index = maxLength
x = B[maxLength] + 1

for i in range(N, 0, -1):
    if D[i] == index:
        ans[index] = A[i]
        index -= 1

for i in range(1, maxLength+1):
    print(ans[i], end=' ')


지금까지 백준 알고리즘 동적 계획법 4 부분이었습니다.

읽어주셔서 감사합니다. 😃