๋๋ฌผ์
๋ฌธ์
์ด๋ค ๋๋ฌผ์์ ๊ฐ๋ก๋ก ๋์นธ ์ธ๋ก๋ก N์นธ์ธ ์๋์ ๊ฐ์ ์ฐ๋ฆฌ๊ฐ ์๋ค.
์ด ๋๋ฌผ์์๋ ์ฌ์๋ค์ด ์ด๊ณ ์๋๋ฐ ์ฌ์๋ค์ ์ฐ๋ฆฌ์ ๊ฐ๋ ๋, ๊ฐ๋ก๋ก๋ ์ธ๋ก๋ก๋ ๋ถ์ด ์๊ฒ ๋ฐฐ์นํ ์๋ ์๋ค. ์ด ๋๋ฌผ์ ์กฐ๋ จ์ฌ๋ ์ฌ์๋ค์ ๋ฐฐ์น ๋ฌธ์ ๋๋ฌธ์ ๊ณจ๋จธ๋ฆฌ๋ฅผ ์๊ณ ์๋ค.
๋๋ฌผ์ ์กฐ๋ จ์ฌ์ ๋จธ๋ฆฌ๊ฐ ์ํ์ง ์๋๋ก ์ฐ๋ฆฌ๊ฐ 2*N ๋ฐฐ์ด์ ์ฌ์๋ฅผ ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋ช ๊ฐ์ง์ธ์ง๋ฅผ ์์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด ์ฃผ๋๋ก ํ์. ์ฌ์๋ฅผ ํ ๋ง๋ฆฌ๋ ๋ฐฐ์นํ์ง ์๋ ๊ฒฝ์ฐ๋ ํ๋์ ๊ฒฝ์ฐ์ ์๋ก ์น๋ค๊ณ ๊ฐ์ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฐ๋ฆฌ์ ํฌ๊ธฐ N(1≤N≤100,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ์๋ฅผ ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ 9901๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ.
์์ ์ ๋ ฅ 1
4
์์ ์ถ๋ ฅ 1
41
๋์ ๋ต
์ฝ๋
N ์
๋ ฅ ๋ฐ๊ธฐ
sum = 1+2N (0๋ง๋ฆฌ, 1๋ง๋ฆฌ ๊ฒฝ์ฐ)
for(i:2๋ง๋ฆฌ~N๋ง๋ฆฌ) // N
sum+=CageCal(i,2N)
CageCal(n,size): // n: ๋ช๋ง๋ฆฌ size: ์ฐ๋ฆฌ size
tmp
if(n==1)
return size
if(size๊ฐ ํ์)
return CageCal(n,size+1)-CageCal(n-1,size-2)
for(i:0~size-2n+1) // ์ง์๋ง
tmp+=2*CageCal(n-1,size-(i+3))
return tmp
=> ์๊ฐ ์ด๊ณผ
=> ํ ์คํธ ์ผ์ด์ค ์ป๊ธฐ
#include <iostream>
using namespace std;
int N;
int result[100001] = { 1,3 };
int main() {
cin >> N;
for (int i = 2; i <= N; i++) {
result[i] = (result[i - 1] * 2 + result[i - 2])%9901;
}
cout << result[N]; // ์ฌ๊ธฐ์ ๋๋๋ฉด ์ค๋ฅ
}
=> ๊ท์น์ ์ฐพ์์ ์ ํ์์ผ๋ก ๋์ฒดํ์๋ค.
ํ ์คํธ ์ผ์ด์ค
1=>3
2=>7
3=>17
4=>41
30000 => 3066
50000 => 2404
100000 => 8379
๋ค๋ฅธ ๋ต
๊ท์น์ ์ฐพ์์ง๋ง ์ ๋ ๊ฒ ๋๋ ์ด์ ๋ฅผ ๊นจ๋ซ์ง ๋ชปํ๋๋ฐ, ์๋์ ๋ธ๋ก๊ทธ์ ์ ์ค๋ช ๋์ด์๋ค.
http://wookje.dance/2017/08/05/boj-1309-%EB%8F%99%EB%AC%BC%EC%9B%90/
๋ค๋ฅธ ๊ฒฝ์ฐ์ ์๋ก ๋๋ ๋ฐฉ๋ฒ๋ ์๋ค.
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 1393๋ฒ :: ์ํ์ฒ ๋ ๊ตฌ๊ตฌํ (์ฝ๋, ์ฃผ์ํ ์ , ํ ์คํธ์ผ์ด์ค) (0) | 2020.05.02 |
---|---|
[c++] BOJ 1107๋ฒ :: ๋ฆฌ๋ชจ์ปจ (์ฝ๋, ํ ์คํธ์ผ์ด์ค) (0) | 2020.05.02 |
[c++] BOJ 1461๋ฒ :: ๋์๊ด (0) | 2020.04.23 |
[c++] BOJ 9251๋ฒ :: LCS (ํ์ด ๋ฐ ์ค๋ช + ๋ ๋์ ์ฝ๋) (0) | 2020.04.18 |
[c++] BOJ 1149๋ฒ :: RGB๊ฑฐ๋ฆฌ (0) | 2020.04.16 |
Comment