Avito Cool Challenge 2018 C. Colorful Bricks ( CF1081C )
阿新 • • 發佈:2018-12-17
題意:
給出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;
}