1. 程式人生 > >Avito Cool Challenge 2018 C. Colorful Bricks ( CF1081C )

Avito Cool Challenge 2018 C. Colorful Bricks ( CF1081C )

題目:Colorful Bricks


題意:

給出3個整數 n , m , k 。分別代表有n塊磚,有m種顏色,其中有k塊磚和自己左邊的磚顏色不一樣。問有幾種染色方案。


思路:

dp。

令f[i][k]表示前i塊磚,有k塊和左邊的不一樣的方案數。

邊界:f[1][0]=m。

轉移方程:

f[i][k]=(f[i-1][k]+(k==0?0:f[i-1][k-1])*(m-1))%md;


程式碼:

#include<bits/stdc++.h>
using namespace std;

#define read(x) scanf("%d",&x)
#define maxn 2000 #define md 998244353 #define ll long long int n,m,K; ll f[maxn+5][maxn+5]; int main() { read(n),read(m),read(K); f[1][0]=m; for(int i=2;i<=n;i++) { for(int k=0;k<=K;k++) { f[i][k]=(f[i-1][k]+(k==0?0:f[i-1][k-1])*(m-1))%md; } } printf("%lld",f[n][K]); return 0; }