[λ°±μ€] 11051λ² - μ΄ν κ³μ 2 (C++)
11051λ²: μ΄ν κ³μ 2
첫째 μ€μ \(N\)κ³Ό \(K\)κ° μ£Όμ΄μ§λ€. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\))
www.acmicpc.net
λ¬Έμ
μ λ ₯
μΆλ ₯
νμ΄κ³Όμ
μ΄νκ³μλΌλ λ¬Έμ μ κΈ°λ³Έ μμΉμ μμ κ°μ νμμΌλ‘ μ κ·Όμ ν μ μλ λ¬Έμ μλ€.
μμ κ°μ μ νμμ΄ n, k κ°μ΄ λ€μ΄μ€λ©΄ μνλ κ°μ λμΆν΄λΌ μ μλ μ νμμ΄λΌκ³ ν΄μ
μμ κ°μ νμ΄μμ λ¬Έμ μ λμ ν΄μ νμ΄λ³΄μλλ μ΄λ―Έ κ³μ°μ΄ λ κ°μ % 10007μ μ§ννλ μμΌλ‘ μ½λ μ§νμ΄λμ΄ λ°νμμλ¬κ° λ°μμ΄ λμμλ€.
κ·Έλμ κ³ λ―Όμ νλ€κ° μ΄ν κ³μλΌλ μ μμ²΄κ° κ΅¬νλ €λ μμ μμμλ 2κ°μ μλ₯Ό λνλ©΄ ꡬν μ μλ κ°μ΄λ€λ³΄λ
// 1
// 1 1
// 1 2 1
// 1 3 3 1
// dp[n][k] = dp[n - 1][k - 1] + dp[n - 1][k]
κ·Έλλ‘ λ°°μ΄μ λ§λ€μ΄μ ꡬνλ €λ κ° μμͺ½μ μλ 2κ°μ κ°μ λνλ νμμΌλ‘ μ½λλ₯Ό ꡬννμμ΅λλ€.
code
#include <iostream>
long long f[1001][1001];
// dp[n][k] = dp[n - 1][k - 1] + dp[n - 1][k]
// 1
// 1 1
// 1 2 1
int main(void)
{
long long n, k;
std::cin >> n >> k;
f[0][0] = 1;
f[1][0] = 1;
f[1][1] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) f[i][j] = 1;
f[i][j] = (f[i - 1][j - 1] + f[i - 1][j]) % 10007;
}
}
std::cout << f[n][k];
return (0);
}
νκΈ°
μ²μμλ λ¬Έμ λ₯Ό μ¬κ·λ‘ μ κ·Όμ νμλλ°
μ¬κ·λ‘ μ κ·Όμ μ¬κ·μ΄λ€λ³΄λ κ°μ κ°μ λ ꡬνλ μν©μ΄ λ°μμ΄ λμ΄ μκ°μ΄κ³Όκ° λ°μμ΄ λμλ€.
dpλ¬Έμ λ₯Ό μ κ·Όν λλ dpμμ²΄κ° μνλ κ°μ ν¨μ¨μ μΌλ‘ λμΆν΄λ΄λ μκ³ λ¦¬μ¦μ΄λ€λ³΄λκΉ
μ¬κ·λ dpμ λ§μ§μλλ€λΌλ μκ°μ κ°μ§κ² λμλ€.