Цветные кирпичики
Условие
Даны три числа. Полоска длины и цветов и число .
Сколько существует способов покрасить полоску, так чтобы выполнялось ровно раз.
По простому модулю
Примеры
входные данные | выходные данные |
---|---|
Решение
Решение
Динамика на префиксе.
- Состояние — количество последовательностей на префиксе где ровно раз .
- Начальные значения т.к. можно покрасить в любой цвет.
- Считаем опять двумя циклами:
-
всегда. Если брать .
-
если , т.к красим в любой из цветов без одного.
- Ответ — все цветов и последний префикс.
int dp[2001][2001];
void solve() {
int n, m, k;
cin >> n >> m >> k;
dp[0][0] = m;
for (int i = 1; i < n; i++) {
dp[i][0] = dp[i - 1][0];
for (int j = 1; j <= k; j++) {
dp[i][j] = add(dp[i - 1][j], mult(dp[i - 1][j - 1], (m - 1)));
}
}
cout << dp[n - 1][k];
}