C. Colorful Bricks

题目链接:https://codeforces.com/contest/1081/problem/C

题意:

有n个横向方块,一共有m种颜色,然后有k个方块的颜色与其左边的颜色不同(第一个除外),问一共有多少染色方案。

题解:

我们首先来考虑一下dp。

设dp(i,j)为当前第i个方块,一共有j个方块与它前面的方块不同的方案个数。

那么转移方程为dp(i,j)=dp(i-1,j-1)*(m-1)+dp(i-1,j)。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD = ,N = ;
ll n,m,k;
ll dp[N][N];
int main(){
cin>>n>>m>>k;
dp[][]=m;
for(int i=;i<=n;i++){
for(int j=;j<i;j++){
dp[i][j]=dp[i-][j];
if(j!=) dp[i][j]=(dp[i][j]+dp[i-][j-]*(m-))%MOD;
}
}
cout<<dp[n][k];
return ;
}

还有一种数学的计数方法。

我们假设已经选定了k种颜色,除开第一个,那么我们就可以直接把2-n的位置进行缩点,缩成有前一个的颜色不等于后一个颜色的点(因为有一些点的颜色是和之前的点颜色相等的,这种对答案没有贡献,取决于之前的那个颜色)。

然后第一个位置有m种情况,之后的每个位置都有m-1种情况。

所以最后答案为C(n-1,k)*m*(m-1)^k。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD = ,N = ;
ll n,m,k;
ll C[N][N];
ll qp(ll a,ll b){
ll ans = ;
while(b){
if(b&) ans=(a*ans)%MOD;
a=(a*a)%MOD;
b>>=;
}
return ans ;
}
int main(){
cin>>n>>m>>k;
C[][]=C[][]=;
for(int i=;i<=n;i++) C[i][]=;
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)
C[i][j]=(C[i-][j-]+C[i-][j])%MOD;
ll ans = (C[n-][k]*m)%MOD; cout<<ans*qp(m-,k)%MOD<<endl;
return ;
}

最新文章

  1. Notepad++正则表达式语法
  2. AC自动机模板
  3. oracle 判断中文函数
  4. 解析 iOS 动画原理与实现
  5. Storm系列(十九)普通事务ITransactionalSpout及示例
  6. Codeforces 549B Looksery Party
  7. HTML5 File 对象
  8. C# KeyValuePair&lt;TKey,TValue&gt;与Container
  9. [Effective Modern C++] Item 1. Understand template type deduction - 了解模板类型推断
  10. UVA-548Tree(二叉树的递归遍历)
  11. VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
  12. 第一章开发简单的Java应用程序
  13. Cocos2d-x 3.2 环境搭建
  14. win10 UWP 获取系统信息
  15. scala打包jar并在Linux下运行
  16. Python的常用语句
  17. ASP.NET Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程 (转载)
  18. PKCS#1
  19. 用WPE+CCproxy+自动代理截取安卓游戏封包
  20. Tomcat架构解析(二)-----Connector、Tomcat启动过程以及Server的创建过程

热门文章

  1. 网页弹出[Object HTMLDivElement],怎么取值?
  2. 分享spring、spring boot、spring cloud一些学习资源,从基础知识到项目实战
  3. my share
  4. Python全栈day 06
  5. Python系列6之面向对象
  6. 常用 Git 命令清单【转--阮一峰】
  7. ABAP 7.51 構文書き方変換について
  8. Python 探测图片文件类型
  9. 1,版本控制git--仓库管理
  10. Android 图片放错位置会拉伸变形