A) 어떤 임의의 텀블러 개수 K개를 만들수 있는지 판별하는 방법은 쉬움. 5K >= S, (S - 5K) + N >= 7K 를 만족하면 됨. 그럼 답에 대해 이분검색을 하면 문제를 풀 수 있음.
B) li 의 곱이 <= 10^4 니까 모든 경우의 입력을 시도하고, 동적계획법.
C) 동적계획법 문제. D1[i][j] -> i번째 날에 술을 마시고 전날에 술을 마셨으면 j = 1, 아니면 j = 0. D2[i] -> i 번째날에 술을 안마셨을때.
D1[i][0] = D2[i - 1] + E[i]
D1[i][1] = D1[i - 1][0] + E[i]
D2[i] = max(D1[i - 1][0], D1[i - 1][1], D2[i - 1])
다음날이 시험이면 D1은 무시.
D) disjoint set 문제. 간선을 내림차순으로 정렬함. 처음 시작 그래프는 간선 없이 정점으로만 이루여있다고 가정하고, 간선을 추가하는식으로 생각하면 됨. 현재 간선이 bottleneck 이 될려면 이 간선을 잇는 두개의 connected component당 적어도 하나의 정점은 통신에 참여하고 있어야함. 각 connected component의 사이즈를 C1, C2 라고 했을때 경우의 수는 (2^C1 - 1) * (2^C2 - 1). 이 경우의 수를 간선 무게에 곱해서 더하면 되고, disjoint set으로 간선추가 (크루스칼하고 비슷한 방식)
E) 그냥 문제에 나와있는데로 하면될듯.
F) 이거도 문제에 나와있는데로만 하면될듯.
G) 가지치기로 되려나? 이 문제는 어렵네.
댓글 0