반응형
문제
풀이
각 정다각형에서 다음과 같은 답이 나온다.
1. 정육각형의 경우 내부에 정삼각형이 있어야 거리가 최소가 된다.
이때 최대거리는 (정삼각형의 최대 거리 +2) 가 된다.
2.정팔각형의 경우 내부에 정사각형이 있어야 거리가 최소가 된다.
이때 최대 거리는 (정사각형의 최대 거리 +2) 가 된다.
3. 정십각형의 경우 내부에 정오각형이 있어야 거리가 최소가 된다.
이때 최대 거리는 (정오각형의 최대 거리 +2) 가 된다.
이 성질을 이용해서 짝수 정다각형에서 다음과 같은 점화식을 만들 수 있다.
dp[n] = dp[n/2] + 2 (n은 짝수)
홀수 n다각형의 경우 n+1정다각형의 경우와 답이 같게 된다.
따라서 최종으로 다음 점화식을 만들 수 있다.
dp[n] = dp[(n+1)/2] + 1
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <bits/stdc++.h>
using namespace std;
int a[1000001];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
a[3] = 0;
a[4] = 1;
for (int i=5; i<=1000000; i++)
a[i] = a[(i+1)/2] + 2;
cin >> n;
cout << a[n];
return 0;
}
|
cs |
반응형
'BOJ' 카테고리의 다른 글
백준 2805 - 나무 자르기 (0) | 2021.06.18 |
---|---|
백준 1260 - DFS와 BFS (0) | 2021.06.12 |
백준 13398 - 연속합 2 (0) | 2020.10.07 |
백준 8895 - 막대 배치 (0) | 2020.10.06 |
백준 6603 - 로또 (0) | 2020.04.30 |