λ¬Έμ
0λΆν° NκΉμ§μ μ μ Kκ°λ₯Ό λν΄μ κ·Έ ν©μ΄ Nμ΄ λλ κ²½μ°μ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
λ§μ
μ μμκ° λ°λ κ²½μ°λ λ€λ₯Έ κ²½μ°λ‘ μΌλ€(1+2μ 2+1μ μλ‘ λ€λ₯Έ κ²½μ°). λν ν κ°μ μλ₯Ό μ¬λ¬ λ² μΈ μλ μλ€.
μ λ ₯
첫째 μ€μ λ μ μ N(1 ≤ N ≤ 200), K(1 ≤ K ≤ 200)κ° μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ λ΅μ 1,000,000,000μΌλ‘ λλ λλ¨Έμ§λ₯Ό μΆλ ₯νλ€.
μ μΆλ ₯ μ
μμ μ λ ₯ | μμ μΆλ ₯ |
20 2 | 21 |
νμ΄
μ νμ μΈ DP λ¬Έμ μ΄λ€. μ΅μ’ μ μΌλ‘ ν©μ΄ nμ΄ λλ λͺ¨λ κ²½μ°μ μλ₯Ό κ³μ°νκΈ° μν΄μλ μ΄μ μ λ§λ€μλ κ°μ μ΄μ©νλ©΄μ κ³μ°ν μ μλ€. μ νμμ λ€μκ³Ό κ°λ€.
DP[i][j] = jκ°λ₯Ό μ¬μ©ν΄μ iλ₯Ό λ§λλ κ²½μ°μ μ
λ§μ½ 10(n)λ₯Ό 3(k)κ°μ μλ₯Ό λν΄μ λ§λ€μ΄μΌ ν λ λ€μκ³Ό κ°μ΄ κ³μ°νλ€.
- 0κ° μ«μλ₯Ό μ¬μ©νλ κ²½μ° λ§λ€ μ μλ μκ° μμΌλ―λ‘ λͺ¨λ 0 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
- 1κ° μ«μλ₯Ό μ¬μ©νλ κ²½μ° λ§λ€μ΄μΌ νλ μ«μκ° κ³§ μ΄μ©ν μ«μλ‘ λͺ¨λ 1 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ]
μ¬κΈ°κΉμ§κ° μ΄κΈ°ν λ¨κ³μ΄λ€. μ΄μ 2κ° μ«μλ₯Ό μ¬μ©ν΄μ κ° μ«μ(1~10)μ λ§λλλ° μ΄λ μ΄μ μ DPλ₯Ό μ΄μ©νκΈ° μμνλ€. μλ₯Ό λ€μ΄ 10μ μ«μ λκ°λ₯Ό μ΄μ©ν΄μ λ§λλ κ²½μ°μλ λ€μκ³Ό κ°μ κ²½μ°λ€μ΄ μλ€.
- DP[1][1] (μ«μ 1κ°λ₯Ό μ΄μ©ν΄μ 1μ λ§λλ κ²½μ°) + 9
- DP[1][2] (μ«μ 1κ°λ₯Ό μ΄μ©ν΄μ 2μ λ§λλ κ²½μ°) + 8
- DP[1][3] (μ«μ 1κ°λ₯Ό μ΄μ©ν΄μ 3μ λ§λλ κ²½μ°) + 7
- DP[1][4] (μ«μ 1κ°λ₯Ό μ΄μ©ν΄μ 4μ λ§λλ κ²½μ°) + 6
- DP[1][5] (μ«μ 1κ°λ₯Ό μ΄μ©ν΄μ 5μ λ§λλ κ²½μ°) + 5
- DP[1][6] (μ«μ 1κ°λ₯Ό μ΄μ©ν΄μ 6μ λ§λλ κ²½μ°) + 4
- DP[1][7] (μ«μ 1κ°λ₯Ό μ΄μ©ν΄μ 7μ λ§λλ κ²½μ°) + 3
- DP[1][8] (μ«μ 1κ°λ₯Ό μ΄μ©ν΄μ 8μ λ§λλ κ²½μ°) + 2
- DP[1][9] (μ«μ 1κ°λ₯Ό μ΄μ©ν΄μ 9μ λ§λλ κ²½μ°) + 1
- DP[1][10] (μ«μ 1κ°λ₯Ό μ΄μ©ν΄μ 10μ λ§λλ κ²½μ°) + 0
μ΄ λ€μμΌλ‘ μ«μ 2κ°λ₯Ό μ΄μ©ν΄μ κ° μ«μλ₯Ό λ§λλ κ²½μ°λ μμ λμΌνκ² λ€μκ³Ό κ°λ€.
- DP[2][1] (μ«μ 2κ°λ₯Ό μ΄μ©ν΄μ 1μ λ§λλ κ²½μ°) + 9
- DP[2][2] (μ«μ 2κ°λ₯Ό μ΄μ©ν΄μ 2μ λ§λλ κ²½μ°) + 8
- DP[2][3] (μ«μ 2κ°λ₯Ό μ΄μ©ν΄μ 3μ λ§λλ κ²½μ°) + 7
- DP[2][4] (μ«μ 2κ°λ₯Ό μ΄μ©ν΄μ 4μ λ§λλ κ²½μ°) + 6
- DP[2][5] (μ«μ 2κ°λ₯Ό μ΄μ©ν΄μ 5μ λ§λλ κ²½μ°) + 5
- DP[2][6] (μ«μ 2κ°λ₯Ό μ΄μ©ν΄μ 6μ λ§λλ κ²½μ°) + 4
- DP[2][7] (μ«μ 2κ°λ₯Ό μ΄μ©ν΄μ 7μ λ§λλ κ²½μ°) + 3
- DP[2][8] (μ«μ 2κ°λ₯Ό μ΄μ©ν΄μ 8μ λ§λλ κ²½μ°) + 2
- DP[2][9] (μ«μ 2κ°λ₯Ό μ΄μ©ν΄μ 9μ λ§λλ κ²½μ°) + 1
- DP[2][10] (μ«μ 2κ°λ₯Ό μ΄μ©ν΄μ 10μ λ§λλ κ²½μ°) + 0
μ΄λ₯Ό μ¬μ©ν μ«μμ μμΈ kλ² λ°λ³΅νκ³ κ°κ° λ°λ³΅λ¬Έμ΄ ν λ² λ μνλλλ° nλ² λ°λ³΅νκ² λλ€. λͺ¨λ κ³Όμ μ κ±°μΉκ² λλ©΄ DP[k][n]μ΄ λ΅μ΄ λλ€. μΆκ°μ μΌλ‘ μ΄μ κ°μ μ΄μ©ν΄μ νμ¬ κ°μ ꡬν λ λ¬Έμ 쑰건 μ€ μ£Όμν΄μΌ ν μ¬νμ΄ μλλ° κ³μ°ν λλ§λ€ 1,000,000,000μΌλ‘ λλ λλ¨Έμ§λ₯Ό μ μ₯ν΄μΌ νλ€. λ§μ§λ§μ ν λ²λ§ ν΄μ£Όκ² λλ©΄ κ³μ° κ³Όμ μ€ κ°μ΄ νμ©κ°λ₯ ν μ«μλ₯Ό λ겨 κ³μ°μ΄ λΆκ°λ₯ν΄μ§λ κ²½μ°λ μ‘΄μ¬νλ€. λλ BigIntλ₯Ό μ¬μ©ν΄μ κ³μ°νκ³ λ§μ§λ§μ ν λ²λ§ κ³μ°ν μ μλ€.
μ½λ
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : "./testcase/2225.txt";
const inputs = fs.readFileSync(filePath).toString().trim().split("\n");
const [n, k] = inputs[0].split(" ").map(Number);
const dp = [...Array(k + 1)].map((_) => new Array(n + 1).fill(0));
for (let i = 0; i <= n; i++) dp[1][i] = 1;
for (let i = 2; i <= k; i++) {
for (let j = 0; j <= n; j++) {
for (let jj = 0; jj <= n; jj++) {
if (j + jj > n) continue;
dp[i][j + jj] = (dp[i][j + jj] + dp[i - 1][j]) % 1000000000;
}
}
}
console.log(dp[k][n]);
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Algorithm] λ‘λ (λ°±μ€ - 6603) (0) | 2023.05.24 |
---|---|
[Algorithm] λ¬Όν΅ (λ°±μ€ - 2251) (0) | 2023.05.22 |
[Algorithm] μ΅λ¨κ²½λ‘ (λ°±μ€ - 1753) (0) | 2023.05.21 |
[Algorithm] 1νλ (λ°±μ€ - 5557) (1) | 2023.05.16 |
[Algorithm] μ΅μ λΉμ© ꡬνκΈ° (λ°±μ€ - 1916) (0) | 2023.05.09 |