Codeforces 830D Singer House 动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/CF830D.html
题解
考虑用 $dp[i][j]$ 表示深度为 $i$ 的树里,有 $j$ 条路径的方案数。分四种情况转移即可:
枚举 $j,k$ ,我们来算一下 $dp[i-1][j]$ 和 $dp[i-1][k]$ 对 $dp[i]$ 的贡献。
设 $tmp = dp[i-1][j] \times dp[i-1][k]$ ,
1. 不合并任何路径。$dp[i][j+k] += tmp$
2. 不合并,并加入当前根节点单独组成路径。$dp[i][j+k+1] += tmp$
3. 合并根和任意一条路径。$dp[i][j+k] += tmp \times 2(j+k)$
4. 合并根和任意两条路径。$dp[i][j+k-1]+= tmp \times 2\binom{j+k}{2}$
由于当 $j>n$ 的时候,$dp[i][j]$ 对于最终答案一定没有贡献(这么多路径不可能合并成一条),所以 dp 状态第二维的上界是 $n$ 。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL read(){
LL x=0,f=1;
char ch=getchar();
while (!isdigit(ch)&&ch!='-')
ch=getchar();
if (ch=='-')
f=0,ch=getchar();
while (isdigit(ch))
x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return f?x:-x;
}
const int N=405,mod=1e9+7;
int n;
int Inv[N],Fac[N];
int Pow(int x,int y){
int ans=1;
for (;y;y>>=1,x=1LL*x*x%mod)
if (y&1)
ans=1LL*ans*x%mod;
return ans;
}
int C(int x,int y){
if (y<0||y>x)
return 0;
return 1LL*Fac[x]*Inv[y]%mod*Inv[x-y]%mod;
}
int dp[N][N];
int main(){
n=read();
for (int i=Fac[0]=1;i<=n;i++)
Fac[i]=1LL*Fac[i-1]*i%mod;
Inv[n]=Pow(Fac[n],mod-2);
for (int i=n;i>=1;i--)
Inv[i-1]=1LL*Inv[i]*i%mod;
memset(dp,0,sizeof dp);
dp[1][1]=dp[1][0]=1;
for (int i=2;i<=n;i++)
for (int j=0;j<=n;j++)
for (int k=0;j+k<=n;k++){
int tmp=1LL*dp[i-1][j]*dp[i-1][k]%mod;
dp[i][j+k]=(tmp+dp[i][j+k])%mod;
dp[i][j+k]=(2LL*tmp*(j+k)+dp[i][j+k])%mod;
dp[i][j+k+1]=(tmp+dp[i][j+k+1])%mod;
dp[i][j+k-1]=(2LL*tmp*C(j+k,2)+dp[i][j+k-1])%mod;
}
cout << dp[n][1];
return 0;
}
Codeforces 830D Singer House 动态规划的更多相关文章
- Singer House CodeForces - 830D (组合计数,dp)
大意: 一个$k$层完全二叉树, 每个节点向它祖先连边, 就得到一个$k$房子, 求$k$房子的所有简单路径数. $DP$好题. 首先设$dp_{i,j}$表示$i$房子, 分出$j$条简单路径的方案 ...
- Codeforces 839C Journey - 树形动态规划 - 数学期望
There are n cities and n - 1 roads in the Seven Kingdoms, each road connects two cities and we can r ...
- Codeforces 834D The Bakery - 动态规划 - 线段树
Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought required ingredient ...
- Codeforces 837D Round Subset - 动态规划 - 数论
Let's call the roundness of the number the number of zeros to which it ends. You have an array of n ...
- CodeForces 623E Transforming Sequence 动态规划 倍增 多项式 FFT 组合数学
原文链接http://www.cnblogs.com/zhouzhendong/p/8848990.html 题目传送门 - CodeForces 623E 题意 给定$n,k$. 让你构造序列$a( ...
- Codeforces 101623E English Restaurant - 动态规划
题目传送门 传送门 题目大意 餐厅有$n$张桌子,第$i$张桌子可以容纳$c_i$个人,有$t$组客人,每组客人的人数等概率是$[1, g]$中的整数. 每来一组人数为$x$客人,餐厅如果能找到最小的 ...
- Codeforces 264C Choosing Balls 动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/CF264C.html 题目传送门 - CF264C 题意 给定一个有 $n$ 个元素的序列,序列的每一个元素是个 ...
- Codeforces 1000G Two-Paths 树形动态规划 LCA
原文链接https://www.cnblogs.com/zhouzhendong/p/9246484.html 题目传送门 - Codeforces 1000G Two-Paths 题意 给定一棵有 ...
- codeforces 17C Balance(动态规划)
codeforces 17C Balance 题意 给定一个串,字符集{'a', 'b', 'c'},操作是:选定相邻的两个字符,把其中一个变成另一个.可以做0次或者多次,问最后可以生成多少种,使得任 ...
随机推荐
- android SDK与ADT版本更新问题
android SDK与ADT版本更新问题 问题:This Android SDK requires Android Developer Toolkit version 14.0.0 or above ...
- pyhon 前面补充和set
一, 主要内容. 补充一个字符串的基本操作 li = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"] s = ...
- appium+java(二)appium初始化参数部分详解
Capabilities介绍 实际上它的全称是:Desired capabilities Desired capability是一个JSON对象,包含一组key和value值.它由客户端发送给服务端, ...
- 安装mysql5.7与创建用户和远程登录授权
环境:ubuntu18.04 参考文章:安装并远程登录授权:https://www.cnblogs.com/chancy/p/9444187.html 用户管理:https://www.cnblogs ...
- 《Spring5官方文档》新功能(4,3)
<Spring5官方文档>新功能 原文链接 译者:supriseli Spring框架的新功能 这一章主要提供Spring框架新的功能和变更. 升级到新版本的框架可以参考.Spring g ...
- java多线程--AtomicReference
AtomicReference介绍 AtomicReference是作用是对"对象"进行原子操作. AtomicReference源码分析(基于JDK1.7.0_40) 在JDK1 ...
- 手把手教你React Native 实战之开山篇《一》
先说一下我为什么学习RN 18年3月29号,随着自己内心的欲望和冲动,任务交接了一下,正式离开一家医疗公司.第二天就入职了这之前已经找好的公司,由于自己对代码浓厚的热情,自己终于也不再带团队.正好有充 ...
- 通过printf从目标板到调试器的输出
最近在SEGGER的博客上看到Johannes Lask写的一篇关于在调试时使用printf函数从目标MCU输出信息到调试器的文章,自我感觉很有启发,特此翻译此文并推荐给各位同仁.当然限于个人水平,有 ...
- python之vscode配置开发调试环境
在vscode中下载python插件,下载量最多的就是 打开launch.json,把以下代码粘贴进去即可 { // 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述. ...
- django 中自带的加密方法
导入django 自带的加密算法 和flask中的哈希加密有一曲同工之妙. from django.contrib.auth.hashers import make_password, ...