- κ²°κ΅ λͺ»νμλ λ¬Έμ . μλμ κ°μ λ°©μμΌλ‘ μ κ·Όνλλ° μ€ν¨νλ€.
(index, maxValue, cost)
λ₯Ό μν State
λ‘ μ μνκ³ (0, 0, 0)
λΆν° μμνμ¬ λ€μ μνλ₯Ό ꡬνλ€.(0, 0, 0)
μ λν κ²½μ°μ μλ 1λ‘ νλ€.- λ€μ μνλ νμ¬ μνμμ
index + 1
μ νκ³ 2κ°μ§ κ²½μ°λ‘ λλμ΄ μ²λ¦¬νλ€. maxValue
κ° λμΌνλ©΄ cost
κ° κ·Έλλ‘μΈ κ²μ΄λ―λ‘ κΈ°μ‘΄ κ²½μ°μ μμ maxValue
λ§νΌμ κ³±νλ€.- μ΅λ κ°μ
maxValue + 1 ~ m
κΉμ§ λ°κΏκ°λ©΄μ κ°κ°μ κ²½μ°μ μμ κΈ°μ‘΄ κ²½μ°μ μλ₯Ό λ£λλ€.
- DPμμλ κΈ°μ‘΄ μν κ°λ€λ‘λΆν° μλ‘μ΄ μνκ°μ λ§λ€μ΄λ΄λ λ°©μμΌλ‘ μ κ·Όνλ κ²μ΄ νμνλ€.
- λ¨Όμ arrayμ 첫λ²μ§Έ elementλ 1λΆν° mκΉμ§ μ ν κ°λ₯νκ³ μ΄λ κ²½μ°μ μλ 1μ΄ λλ€. λ°λΌμ
d[1][i][1] = 1 (i = 1, 2, ..., m)
μ΄λ€. - κ·Έ λ€μ λλ²μ§Έ element λΆν°
n
λ²μ§Έ elementκΉμ§ κ²½μ°μ μλ₯Ό κ³μ°νλ©΄ λλ€. - κ° elementμ λν΄μ
maxValue
κ° 1 ~ m
μΈ κ²½μ°, cost
κ° 1 ~ k
μΈ κ²½μ°μ λ°λΌ κ²½μ°μ μλ₯Ό κ³μ°νλ€. d[len][maxValue][cost]
κ°μ μμλλ‘ κ³μ°νλ€.
- μ¬κΈ°μ κ²½μ°μ μλ μ΄μ κ²½μ°μ μλ‘ λΆν° ꡬν μ μλλ° costκ° μ΄μ μ λΉν΄μ μ¦κ°ν κ²½μ°μ κ·Έλ μ§ μμ κ²½μ°λ₯Ό ꡬλΆν΄μ λνλ©΄ λλ€.
- costκ° μ¦κ°ν κ²½μ°
- costκ° μ¦κ°νκΈ° μ μ μνλ
d[len - 1][i][cost - 1]
μ ν΄λΉλλ€. - costκ° μ¦κ°νλ€λ κ²μ μ΄μ
maxValue
κ°μ΄ νμ¬λ³΄λ€ μλ€λ μλ―Έμ΄λ€. λ°λΌμ (i = 1 ~ maxValue - 1)
μ΄λ€. - ν΄λΉλλ κ°μ λͺ¨λ λν΄μ£Όλ©΄ λλ€.
- costκ° κ·Έλλ‘μΈ κ²½μ°
- costκ° κ·Έλλ‘λΌλ©΄
maxValue
μ μ΄μ , νμ¬ κ°μ΄ λμΌνλ€λ μλ―Έμ΄λ€. κ·Έλ λ€λ©΄ array elementμ νμ¬ κ°μ 1 ~ maxValue
μ€μμ κ³ λ₯Ό μ μμΌλ―λ‘ κ²½μ°μ μλ maxValue
κ° λλ€. μ΄λ₯Ό μ΄μ κ²½μ°μ μμ κ³±ν΄μΌ νλ―λ‘ κ²°κ³Όκ°μ d[len - 1][maxValue][cost] * maxValue
λ₯Ό λν΄μ£Όλ©΄ λλ€.
- μ΅μ’
κ²°κ³Όλ κΈΈμ΄κ°
n
, costκ° k
μΈ λͺ¨λ κ²½μ°μ μλ₯Ό λν΄μ£Όλ©΄ λλ€. d[n][i][k] (i = 1 ~ m)
κ°μ λͺ¨λ λνλ€.
static constexpr long long MOD_BASE = 1e9 + 7;
class Solution {
public:
int numOfArrays(int n, int m, int k) {
vector<vector<vector<long long>>> d(n + 1, vector<vector<long long>>(m + 1, vector<long long>(k + 1, 0)));
for (int i = 1; i <= m; ++i) {
d[1][i][1] = 1;
}
for (int len = 2; len <= n; ++len) {
for (int maxValue = 1; maxValue <= m; ++maxValue) {
for (int cost = 1; cost <= k; ++cost) {
long long sum = 0;
for (int i = 1; i < maxValue; ++i) {
sum = (sum + d[len - 1][i][cost - 1]) % MOD_BASE;
}
d[len][maxValue][cost] = (d[len - 1][maxValue][cost] * maxValue + sum) % MOD_BASE;
}
}
}
long long result = 0;
for (int i = 1; i <= m; ++i) {
result = (result + d[n][i][k]) % MOD_BASE;
}
return result;
}
};