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 ;
}

Avito Cool Challenge 2018:C. Colorful Bricks的更多相关文章

  1. Avito Cool Challenge 2018:D. Maximum Distance (最小生成树)

    题目链接 题意 : 给出一个联通图和一些特殊的点,现在定义cost(u,v)为一条从u到v的路径上面边权的最大值 , 定义dis(u,v) 为从u到v 路径上面cost 的最小值 然后求所有特殊点到其 ...

  2. Avito Cool Challenge 2018:D. Maximum Distance

    D. Maximum Distance 题目链接:https://codeforces.com/contest/1081/problem/D 题意: 给出一个连通图以及一些特殊点,现在定义cost(u ...

  3. Codeforces Avito Code Challenge 2018 D. Bookshelves

    Codeforces Avito Code Challenge 2018 D. Bookshelves 题目连接: http://codeforces.com/contest/981/problem/ ...

  4. Avito Cool Challenge 2018 C. Colorful Bricks 【排列组合】

    传送门:http://codeforces.com/contest/1081/problem/C C. Colorful Bricks time limit per test 2 seconds me ...

  5. Avito Cool Challenge 2018(div1+2)

    A. Definite Game: 题意:输入N,输出最小的结果N-x,其中x不少N的因子. 思路:N=2时,输出2:其他情况输出1:因为N>2时,N-1不会是N的因子. #include< ...

  6. Avito Cool Challenge 2018 Solution

    A. Definite Game 签. #include <bits/stdc++.h> using namespace std; int main() { int a; while (s ...

  7. Avito Cool Challenge 2018

    考挂了.. A - Definite Game 直接看代码吧. #include<cstdio> #include<cstring> #include<algorithm ...

  8. Avito Cool Challenge 2018 C - Colorful Bricks

    题目大意: 1*n的格子 可以用m种颜色涂色 已知从第2开始到第n个格子 有k个格子与其左边的格子颜色不同 求涂色的方案数 相当于把n个格子分成k+1份 可以递推出分成k+1份的不同的方案数(其实递推 ...

  9. Avito Code Challenge 2018

    第一次打CF,很菜,A了三道水题,第四题好像是是数位DP,直接放弃了.rateing从初始的1500变成了1499,还是绿名,这就很尴尬.之后觉得后面的题目也没有想象的那么难(看通过人数)过两天吧剩下 ...

随机推荐

  1. JQuery制作网页—— 第四章JavaScript对象及初识面向对象

    1.对象:在JavaScript中,所有事物都是对象,如字符串.数值.数组.函数等. JavaScript中的基本数据类型: number(数值类型)   string(字符串类型)  boolean ...

  2. C++指针之间的赋值与转换规则总结

    C++指针之间的赋值与转换规则总结 Note:以下结论不适用于类的成员函数指针,关于类的成员函数指针会单独讨论. 一.任何类型的指针变量均可直接赋值给const void * 任何类型的非const指 ...

  3. python中的文件操作小结2

    ''' #-----------文件修改---------- f=open("test_1",'r',encoding="utf-8") f2=open(&qu ...

  4. spark提交运算原理

    前面几天元旦过high了,博客也停了一两天,哈哈,今天我们重新开始,今天我们介绍的是spark的原理 首先先说一个小贴士: spark中,对于var count = 0,如果想使count自增,我们不 ...

  5. python os模块练习题

    # 1.获取某个文件所在目录的上一级目录. # 例如'D:\python\projects\test19.py'目录的结果 :D:\python\projects # 方法1 # path = os. ...

  6. 9,Linux下的python3,virtualenv,Mysql、nginx、redis安装配置

    常用服务安装部署   学了前面的Linux基础,想必童鞋们是不是更感兴趣了?接下来就学习常用服务部署吧! 安装环境: centos7 + vmware + xshell MYSQL(mariadb) ...

  7. 1-Linux运维人员要求

    linux 运维: 1.linux基础操作命令2.linux基础服务搭建3.文本处理命令4.shell脚本编程 python perl php5.数据库 mysql oracle6.lvs集群 热备 ...

  8. android apk瘦身之 图片压缩 tinypng

    参考地址: http://blog.csdn.net/jy692405180/article/details/52409369 http://www.tuicool.com/articles/BraI ...

  9. Git上手:使用Tortoisegit操作Git

    在工作中,为了提高git使用效率,更多会采用git图形化工具来操作git.(特殊情况下才使用git命令行操作git) git自带的图形化工具界面不够友好,就选择第三方git图形化工具,市面上第三方gi ...

  10. postman导出excel出现response

    https://jingyan.baidu.com/article/915fc414559b4351394b2084.html