Algorithm
[๋ฐฑ์ค/C++] 2225. ํฉ๋ถํด
bba_dda
2021. 3. 24. 14:22
๋ฐ์ํ
๋ฌธ์
2225๋ฒ: ํฉ๋ถํด
์ฒซ์งธ ์ค์ ๋ต์ 1,000,000,000์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
www.acmicpc.net
์ ์์ฌํญ
1+2 ์ 2+1์ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ก ์ผ๋ค๋ ๊ฒ.
0๋ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ.
๊ฒฝ์ฐ์ ์๋ฅผ 1000000000์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํด์ผํ๋ค๋ ๊ฒ
ํ์ด
์ด ๋ฌธ์ ๋ DP(๋์ ๊ณํ๋ฒ)์ ์ด์ฉํ๋ฉด ํ ์ ์๋ค!
2์ฐจ์ ์บ์๋ฐฐ์ด์ ์ด์ฉํ ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ ์ฉํด์ผ ํ๋ค.
cache[k][n] : k๊ฐ์ ์ซ์๋ฅผ ๋ํด์ n์ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์
๊ทธ๋ฆฌ๊ณ cache[k][n]์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ ์ ์๋ค. (์ ํ์)
cache[k][n] = cache[k-1][0] + cache[k-1][1] + cacke[k-1][2] + ... + cache[k-1][n]
์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
int N, K;
int cache[201][201] = { 0, }; // [k][n] k๊ฐ์ ์๋ก n์ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์ ์ ์ฅ
int main(void) {
cin >> N >> K;
for (int i = 0;i <= N;i++) {
cache[1][i] = 1; // 1๊ฐ๋ก N์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์๋ 1๊ฐ (N์์ )
}
for (int i = 0;i <= K;i++)
cache[i][0] = 1; //i๊ฐ๋ก 0์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์๋ 1๊ฐ (0์ i๊ฐ)
for (int k = 2; k <= K; k++) {
for (int n = 1; n <= N; n++) {
for (int i = 0; i <= n; i++){
cache[k][n] = (cache[k][n] + cache[k - 1][i]) % 1000000000;
}
}
}
cout << cache[K][N] << endl;
return 0;
}
๊ฒฐ๊ณผ
๋ฐ์ํ