題目大意:
給你n個塊,m種顏色,讓你塗顏色,要求最後相鄰磚塊顏色不同的情況總數爲k,問你有多少種圖法
解題思路:
n個磚塊間總共有n-1個間隔,從n-1個間隔中選出k個間隔,這k個間隔相鄰的兩端磚塊顏色不同,其他間隔兩端磚塊顏色相同,可以看成是給k+1個磚塊塗顏色,相鄰磚塊顏色互不相同
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int c[2020][2020],n,m,k;
const int mod=998244353;
int fastexp(int base,int x)
{
int res=1;
while(x)
{
if(x&1)
{
res*=base;
res%=mod;
}
x>>=1;
cout<<base<<endl;
base=base*base%mod;
}
return res;
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
c[0][0]=1;
for(int i=1;i<=n;++i)
{
c[i][0]=1;
for(int j=1;j<=i;++j)
c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
}
int ans=c[n-1][k];
int temp=k+1;
ans=ans*m%mod;
temp--;
ans=ans*fastexp(m-1,temp)%mod;
printf("%d",ans);
return 0;
}
注意mod比較大,可能會炸int