洛谷 P1472 奶牛家谱 Cow Pedigrees 题解
2024-08-24 22:56:52
这道题我觉得是个不错的题;
根据题意可以较清晰的发现ans只和n和k有关;(因为输入的只有这两个数啊~);
那么设f[i][j]表示前i层用了j个节点的方案数,g[i][j]表示深度小于等于i并且用了j个节点的方案数总和;
对于一颗树,可以把它分成3部分:根节点,左字树,右子树;
对于一颗深度为i的树,左子树和右子树至少有一个达到了深度i-1;
所以转移方程是:f[i][j]+=f[i-1][k]*g[i-2][j-k-1]+f[i-1][j-k-1]*g[i-2][k]+f[i-1][k]*f[i-1][j-k-1];
g[i][j]+=g[i-1][j]+f[i-1][j];
另外一定要注意取模的细节!!!
#include <bits/stdc++.h>
#define p 9901
using namespace std;
int n,m;
int f[][],g[][];
int main()
{
cin>>n>>m;
f[][]=;
for(register int i=;i<=m;i++){
for(register int j=;j<=n;j+=){
for(register int k=;k<=j--k;k+=){
int tmp=;
if(k==j--k) tmp=;
f[i][j]+=tmp*((f[i-][j-k-]*g[i-][k])%p+(f[i-][k]*g[i-][j-k-])%p+(f[i-][k]*f[i-][j-k-])%p);
f[i][j]%=p;
}
}
for(register int j=;j<=n;j++){
g[i-][j]=(g[i-][j]+g[i-][j]+f[i-][j])%p;
g[i-][j]%=p;
}
}
cout<<f[m][n]%p<<endl;
}
最新文章
- js修改后没反应-看看是不是取的缓存
- 【转】swift实现ios类似微信输入框跟随键盘弹出的效果
- 从数据库导出到excel
- VS2008切换设计视图卡死 停止响应
- 用java实现简易PC版2048
- Java编程提高性能时需注意的地方
- Lattice Diamond 学习之编译、检查和设置约束
- Java Android 注解(Annotation) 及几个常用开源项目注解原理简析
- Echart 商业级数据图表
- 本人在安装ADT Bundle for windows的各种问题总结
- Java [leetcode 26]Remove Duplicates from Sorted Array
- 使用clone
- chrome解决http自动跳转https问题
- 临时关闭Mac SIP系统完整性保护机制
- package.json 里的 dependencies和devDependencies区别
- Java过滤掉字符串中的html标签、style标签、script标签
- 【转】ArrayList与LinkedList的区别和适用场景
- qq空间爬取
- 六、uboot 代码流程分析---start.S
- ADO.NET介绍2
热门文章
- 【转载】多网卡的7种bond模式原理
- js+jq 淡入淡出轮播(点击+定时+鼠标进入移出事件)
- ltelliJ IDEA 创建Maven web项目无src目录的解决方案
- 如何使用git工具
- C++入门经典-例6.4-输出字符数组中的内容
- Docker入门-常用命令
- 线程同步synchronized理解
- 使用同步上下文进行C#与VBA代码和Excel之间的交互
- DeepFaceLab参数详解之Batch-Size的使用和取值!
- iOS charts CombinedChartView First and last bars are shown half only