ݺߣ
Search
Submit Search
제1회 알고스팟 새싹 콘테스트 G. BODY 풀이
•
Download as PPTX, PDF
•
0 likes
•
681 views
M
minsu kim
제1회 알고스팟 새싹 콘테스트 G. 쟤가 몸통입니다(BODY) 풀이입니다.
Read less
Read more
1 of 13
Download now
Download to read offline
More Related Content
제1회 알고스팟 새싹 콘테스트 G. BODY 풀이
1.
<쟤가 몸통입니다(ID:BODY)> 풀이
https://algospot.com/judge/problem/read/BODY
2.
예제 1번 데이터
: 2 1 5 6 3 4 2가 우두머리 일 때, 몸통 멤버의 가짓수?
3.
예제 1번 데이터
: 2 1 5 6 3 4 2가 우두머리 일 때, 몸통 멤버의 가짓수? = 2를 root로 하는, size가 3인, subtree의 개수
4.
예제 1번 데이터
: 2 1 5 2 1 6 2 1 3 2 3 4 = 4가지 경우 존재
5.
2 1 5
6 3 4 DP 구상 2 1 5 6 3 4 Size=3 = Size=2
6.
2 1 5
6 3 4 DP 구상 2 1 5 6 Size=2 3 4 = Size=2 2 1 5 6 3 4 or Size=1
7.
2 1 5
6 3 4 DP 구상 2 1 5 6 Size=2 3 4 = Size=2 2 1 5 6 3 4 or Size=1 1 3 3+1=4
8.
2 1 5
6 3 4 DP 구상 dp(i,j) = [i..N]범위의 트리에서 j개를 선택하는 경우의 수
9.
2 1 5
6 3 4 DP 구상 dp(i,j) = [i..N]범위의 트리에서 j개를 선택하는 경우의 수 [i..N]범위의 트리? = 전위순회한 결과를 이용한다! (자주 쓰이는 방법)
10.
2 1 5
6 3 4 DP 구상 2 1 5 6 3 4 전위순회 S[i] 6 3 1 1 2 1 (S[i]=sub-tree의 size) dp[i][j]=dp[i+1][j-1]+dp[i+S[i]][j] (i번째 element를 선택한 경우) (선택하지 않은 경우)
11.
점화식 정리 dp[i][j]=[i..N]범위의
트리 내에서 j개를 선택하는 경우의 수라 정의할 때, dp[i][0]=1 (모든 i에 대해) dp[i][j]=dp[i+1][j-1]+dp[i+S[i]][j] (j≠0일 때)
12.
의사코드 1. A부터
B까지 경로를 찾아 root를 구함 2. 각 root에 대해서 dfs를 수행 : S[i] 세팅 3. dp[i][j]를 구함(i는 거꾸로 구해줘야) 4. dp[0][Q]가 정답이 됨
13.
시간복잡도 • dp배열
순회에 지배 • 최대 N개의 root에 대해 N*Q의 반복문을 수행하므로, • O(N²Q)=약 10^8번 연산!
Download