Codeforces - 1081C - Colorful Bricks - 简单dp - 组合数学
https://codeforces.com/problemset/problem/1081/C
這道題是不會的,我只會考慮 $k=0$ 和 $k=1$ 的情況。
$k=0$ 就是全部同色, $k=1$ 就是左邊一個色右邊一個色, $m(m-1)$ ,再選轉折點有 $i-1$ 種 $C_{i-1}^{1} $( $i$ 個球。 $i-1$ 個空擋都可以插)。
到 $k=2$ 呢?可以是三種不同顏色,也可以是左右左,也就是 $m(m-1)(m-1)$ ,再選轉折點有 $C_{i-1}^{2}$ 。
到k=3呢?更復雜了? $m(m-1)(m-1)(m-1)$ ,中間的用隔板法算,也就是 $C_{i-1}^{3}$ ?
所以答案其實就是 $m(m-1)^kC_{n-1}^k$ ,是組合數學?
隔板法就是:(可以為空的情況)給每組默認加上一個小球,然后隔板就可以選所有球的間隔。(不能為空的情況:)選所有球的間隔
ll qpow(ll x,ll n){
ll res=;
while(n){
if(n&)
res=res*x%p;
x=x*x%p;
n>>=;
}
return res;
}
void init(int n){
fac[]=;
for(int i=;i<=n;i++){
fac[i]=fac[i-]*i%p;
}
invfac[n]=qpow(fac[n],p-);
//費馬小定理
for(int i=n;i>=;i--){
invfac[i-]=invfac[i]*i%p;
}
//線性求階乘逆元
}
ll C(int n,int m){
return fac[n]*invfac[n-m]%p*invfac[m]%p;
}
dp解法: $f[i][j]=f[i-1][j]+f[i-1][j-1]$ ,以位置 $i$ 為結尾的,有j次轉折,分在此轉折和跟隨左側顏色兩種情況
好不容易抄了一個線性求 $invfac$ ,居然費馬小定理的時候傳入一個 $n$ 而不是 $fac[n]$ ,我是服氣了的,最后還忘記把 $2$ 改成 $k$ ,我大概是智障吧。
#include<bits/stdc++.h>
using namespace std;
#define ll long long ll dp[][]={}; //dp[i][k]以i為結尾的,有k塊磚與左邊的顏色不一樣
ll p=; ll pow_mm1[];
ll fac[];
ll invfac[]; ll qpow(ll x,ll n){
ll res=;
while(n){
if(n&)
res=res*x%p;
x=x*x%p;
n>>=;
}
return res;
} void init(int n){
fac[]=;
for(int i=;i<=n;i++){
fac[i]=fac[i-]*i%p;
}
invfac[n]=qpow(fac[n],p-);
//費馬小定理
for(int i=n;i>=;i--){
invfac[i-]=invfac[i]*i%p;
}
//線性求階乘逆元
} ll C(int n,int m){
return fac[n]*invfac[n-m]%p*invfac[m]%p;
} int n,m,k;
int main(){
init(); pow_mm1[]=;
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=;i++){
pow_mm1[i]=pow_mm1[i-]*(m-)%p;
} /*for(int i=1;i<=n;i++){
dp[i][0]=m;
//都是同一種顏色
} for(int i=1;i<=n;i++){
dp[i][1]=m*(m-1)%p*(i-1)%p;
//左邊的至少一塊磚其中一種顏色,右邊的另一種顏色,左邊有1~i-1塊磚
for(int k=2;k<=i-1;k++){
dp[i][k]=(m*pow_mm1[k])%p*C(i-1,k)%p;
}
}
*/ //dp[i][k]=(m*pow_mm1[k])%p*C(i-1,k)%p;
printf("%lld\n",(m*pow_mm1[k])%p*C(n-,k)%p); }
拓展閱讀:組合數學的水題?https://www.cnblogs.com/kuangbin/archive/2012/08/28/2661066.html
2019-01-16
總結
以上是生活随笔為你收集整理的Codeforces - 1081C - Colorful Bricks - 简单dp - 组合数学的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 状态码是canceled
- 下一篇: Minimum Inversion Nu