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. Linux - bashrc之alias

    1. cd ~ 2. touch .bashrc // 若该文件不存在的话 3. vim .bashrc ----------------复制粘贴如下文本--------------- # alias ...

  2. Intellij IDEA 像eclipse那样给maven添加依赖,且Intellij idea里在pom.xml里添加Maven依赖,本地仓库下拉列表显示包很少的血的经验

    打开pom.xml,在它里面使用快捷键:ALT+Insert  ————>点击dependency 再输入想要添加的依赖关键字,比如:输个spring   出现下图: 根据需求选择版本,完成以后 ...

  3. python核心编程2 第八章 练习

    8–2. 循环. 编写一个程序, 让用户输入三个数字: (f)rom, (t)o, 和 (i)ncrement . 以 i为步长, 从 f 计数到 t , 包括 f 和 t . 例如, 如果输入的是 ...

  4. redis操作帮助类

    RedisHelper.java import redis.clients.jedis.*; import java.util.*; public class RedisHelper { privat ...

  5. 关于对GitHub的使用

    什么是GitHub? GitHub是版本控制和协作的代码托管平台.它可以让你在其他人在任何地方一起工作. 本文主要向您介绍GitHub essentials,如存储库,分支,提交和合并请求.将您创建自 ...

  6. java 二进制、位运算、和移位运算符(2013-07-30-bd 写的日志迁移

    二进制是逢2进位的进位制,0.1是基本算符, 1字节=8位 比如 int a =1 ;int 占4个字节在计算机里表示为: java中的4个位运算,分别是“按位与&.按位或|.按位异或^,按位 ...

  7. Head First Java-图形化界面

    Head First Java是本挺好的书,讲的比较清楚和简单.主要看原则.概念啥的.语法什么的,还是靠谷歌吧:) 这部分的笔记也有很多了,最近会努力更新和搬运.顺便自己也重新读一下. 就酱.想要这本 ...

  8. bin/postconf: error while loading shared libraries: libmysqlclient

    今天在编译安装postfix的时候 make install 出现如下错误 bin/postconf: error while loading shared libraries: libmysqlcl ...

  9. 将WebAPI发布到本地服务器与远程服务器

    一.本地服务器 参考链接:https://blog.csdn.net/shuai_wy/article/details/69221858 1.要实现 IIS Express域名.IP的访问,关键在于需 ...

  10. Leetcode 538. 把二叉搜索树转换为累加树

    题目链接 https://leetcode.com/problems/convert-bst-to-greater-tree/description/ 题目描述 大于它的节点值之和. 例如: 输入: ...