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 - 组合数学的更多相关文章
- Codeforces - 9D - How many trees? - 简单dp - 组合数学
https://codeforces.com/problemset/problem/9/D 一开始居然还想直接找公式的,想了想还是放弃了.原来这种结构是要动态规划. 状态是知道怎么设了,$t_{nh} ...
- Codeforces 1108D - Diverse Garland - [简单DP]
题目链接:http://codeforces.com/problemset/problem/1108/D time limit per test 1 secondmemory limit per te ...
- Codeforces - 702A - Maximum Increase - 简单dp
DP的学习计划,刷 https://codeforces.com/problemset?order=BY_RATING_ASC&tags=dp 遇到了这道题 https://codeforce ...
- Codeforces - 474D - Flowers - 构造 - 简单dp
https://codeforces.com/problemset/problem/474/D 这道题挺好的,思路是这样. 我们要找一个01串,其中0的段要被划分为若干个连续k的0. 我们设想一个长度 ...
- Codeforces - 909C - Python Indentation - 简单dp
http://codeforces.com/problemset/problem/909/C 好像以前做过,但是当时没做出来,看了题解也不太懂. 一开始以为只有上面的for有了循环体,这里的state ...
- CodeForces 30C Shooting Gallery 简单dp
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq574857122/article/details/36944227 题目链接:点击打开链接 给定 ...
- Codeforces - 1033C - Permutation Game - 简单dp - 简单数论
https://codeforces.com/problemset/problem/1033/C 一开始觉得自己的答案会TLE,但是吸取徐州赛区的经验去莽了一发. 其实因为下面这个公式是 $O(nlo ...
- CodeForces 22B Bargaining Table 简单DP
题目很好理解,问你的是在所给的图中周长最长的矩形是多长嗯用坐标(x1, y1, x2, y2)表示一个矩形,暴力图中所有矩形易得递推式:(x1, y1, x2, y2)为矩形的充要条件为: (x1, ...
- Codeforces Round #260 (Div. 1) A. Boredom (简单dp)
题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...
随机推荐
- python 3.4读取输入参数
python 3.4读取输入参数 学习了:https://blog.csdn.net/qq_24815615/article/details/52302615 注意,sys.args[0]是pytho ...
- Win7 VNC远程连接Centos桌面
一,安装Linux桌面: yum -y groupinstall Desktop yum -y groupinstall "X Window System" yum -y grou ...
- shell 检查文件夹所属用户组
shell 检查文件夹所属用户组 #!/bin/bash # 检查文件夹 权限是否777 检查文件夹所属组是否www # authro ranmufei # 2017 08 21 云板容器版 /dat ...
- Android中Intent具体解释(二)之使用Intent广播事件及Broadcast Receiver简单介绍
通过第一篇的解说,我们已经看到了怎样使用Intent来启动新的应用程序组件,可是实际上他们也能够使用sendBroadcast方法来在组件间匿名的广播消息. 作为一个系统级别的消息传递机制,Inten ...
- apk程序查找方法调用
有android killer,现在ida对android的支持等一些方便工具,此篇(关于搜索和修改代码)废弃. 没有好的调试工具下 常用插代码(如果怕影响寄存器值,可以将.locals xxx改多几 ...
- Android — 长按ListView 利用上下文菜单(ActionMode) 进行批量事件处理
好久没写博客拉``````` 近期最终略微闲一点了``````` 无聊拿手机清理短信.发现批量事件的处理还是挺管用的`````` 那么自己也来山寨一记看看效果吧````` 闲话少说,首先,我们来看下手 ...
- HDU 6109 数据分割 【并查集+set】 (2017"百度之星"程序设计大赛 - 初赛(A))
数据分割 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- JOptionPane常用提示框
//JOptionPane.showMessageDialog(parentComponent, message, title, messageType, icon); JOptionPane.sho ...
- aop+自定义注解
自定义注解,并且实现,需要两个文件: 自定义注解类: package com.clc.server.annotation; import java.lang.annotation.ElementTyp ...
- (linux)块设备驱动程序
1.4.1 Linux块设备驱动程序原理(1) 顾名思义,块设备驱动程序就是支持以块的方式进行读写的设备.块设备和字符设备最大的区别在于读写数据的基本单元不同.块设备读写数据的基本单元为块,例如 ...