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 - 组合数学的更多相关文章

  1. Codeforces - 9D - How many trees? - 简单dp - 组合数学

    https://codeforces.com/problemset/problem/9/D 一开始居然还想直接找公式的,想了想还是放弃了.原来这种结构是要动态规划. 状态是知道怎么设了,$t_{nh} ...

  2. Codeforces 1108D - Diverse Garland - [简单DP]

    题目链接:http://codeforces.com/problemset/problem/1108/D time limit per test 1 secondmemory limit per te ...

  3. Codeforces - 702A - Maximum Increase - 简单dp

    DP的学习计划,刷 https://codeforces.com/problemset?order=BY_RATING_ASC&tags=dp 遇到了这道题 https://codeforce ...

  4. Codeforces - 474D - Flowers - 构造 - 简单dp

    https://codeforces.com/problemset/problem/474/D 这道题挺好的,思路是这样. 我们要找一个01串,其中0的段要被划分为若干个连续k的0. 我们设想一个长度 ...

  5. Codeforces - 909C - Python Indentation - 简单dp

    http://codeforces.com/problemset/problem/909/C 好像以前做过,但是当时没做出来,看了题解也不太懂. 一开始以为只有上面的for有了循环体,这里的state ...

  6. CodeForces 30C Shooting Gallery 简单dp

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq574857122/article/details/36944227 题目链接:点击打开链接 给定 ...

  7. Codeforces - 1033C - Permutation Game - 简单dp - 简单数论

    https://codeforces.com/problemset/problem/1033/C 一开始觉得自己的答案会TLE,但是吸取徐州赛区的经验去莽了一发. 其实因为下面这个公式是 $O(nlo ...

  8. CodeForces 22B Bargaining Table 简单DP

    题目很好理解,问你的是在所给的图中周长最长的矩形是多长嗯用坐标(x1, y1, x2, y2)表示一个矩形,暴力图中所有矩形易得递推式:(x1, y1, x2, y2)为矩形的充要条件为: (x1, ...

  9. Codeforces Round #260 (Div. 1) A. Boredom (简单dp)

    题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...

随机推荐

  1. Android电子书项目实训【项目说明】【1】

    概述: 本实训项目是本科教学中,Android课程实训的项目,旨在训练Android App訪问server,获取server数据,解析,并呈现的流程.主要包括的功能有: 1.用户注冊 2.登录 3. ...

  2. vue - 前置工作

    vue 中文官网:https://cn.vuejs.org/ vue ES6语法:https://www.cnblogs.com/zhouyangla/p/7225335.html vue Debug ...

  3. Spring Boot 使用Java代码创建Bean并注冊到Spring中

    从 Spring3.0 開始,添加了一种新的途经来配置Bean Definition,这就是通过 Java Code 配置 Bean Definition. 与Xml和Annotation两种配置方式 ...

  4. 【Mongodb教程 第十八课 】MongoDB常用命令 数据库命令 集合操作命令

    面向文档的 NoSQL 数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能.  条件操作符 <, <=, >, >=  这个操作符就不用多 ...

  5. 【转载】TCP粘包问题分析和解决(全)

    TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送 ...

  6. java 文件读写的有用工具

    java 文件读写的有用工具 package org.rui.io.util; import java.io.BufferedReader; import java.io.File; import j ...

  7. POJ 2886 Who Gets the Most Candies?(树状数组+二分)

    题目链接 注意题目中给的顺序是顺时针的,所以在数组中应该是倒着存的.左就是顺时针,右就是逆时针.各种调试之后,终于A了,很多种情况考虑情况. #include <cstring> #inc ...

  8. intellij IDEA 更新java后不用重启tomcat

    最近项目大了,每次修改后重启都要等和很久,那个煎熬…… 为了解决这个问题,万能的Google  装了这个  JREBEL 5.63最新的 安装步骤: 一.IDEA在线搜索 jrebel  安装 二.破 ...

  9. andfix使用

    1.andfix简介 AndFix是一个Android App的在线热补丁框架.使用此框架,我们能够在不重复发版的情况下,在线修改App中的Bug.AndFix就是 “Android Hot-Fix” ...

  10. SWT 安装

    下载地址: http://www.eclipse.org/windowbuilder/download.php 看到页面如下:选择图片标记的 3.7 (Indigo)  update site lin ...