- κ²°κ΅ λͺ»νμλ λ¬Έμ . μλμ κ°μ λ°©μμΌλ‘ μ κ·Όνλλ° μ€ν¨νλ€.
(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;
}
};