太精妙,留着以后慢慢消化

https://www.luogu.org/problemnew/show/P1472

法一:

我们一层一层地来推,枚举层数,然后再枚举这一层选择的奶牛的个数(必须是偶数个的,因为我第一层已经处理好了),然后再枚举上一层选择的奶牛的个数(也必须是偶数的,因为我把第二层也特殊处理了,就可以从第三层开始了),但是发现一共要选择n个奶牛,所以不得不再加一维目前总共选择的奶牛的数量,也就是加一层循环来枚举v罢了;现在就是重点!!!假设上一层选择了m只奶牛,这一层选择了j只奶牛,那么m必须满足m>=j/2(因为二叉树的性质),假设上一层的状态为f[i-1][m][v-j],也就是i-1层选择了m只奶牛,前i-1层总共选择了v-j只奶牛的方案总数,这时第i层就是选择了j只奶牛了,第i层的j只奶牛和第i-1层的m只奶牛互相找妈妈,那么可以选择的方案总数就是C(m,j/2)*f[i-1][m][v-j],最后再统计就可以了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll ,ll > P;
#define INF 0xf3f3f3f
const int Max=int(1000+10);
const int mol=9901;
int n,k,dp[100+10][200+10][200+10],w[200+10][200+10];
int main() {while(~scanf("%d%d",&n,&k)) {w[0][0]=1;      dp[1][1][1]=1;dp[2][2][3]=1;for(int i=1;i<=n;i++)for(int j=0;j<=i;j++)if(j==0||i==j) w[i][j]=1;elsew[i][j]=(w[i-1][j]+w[i-1][j-1])%mol;for(int i=3;i<=k;i++)for(int j=2;j<=(n/2+1);j+=2)for(int x=j+1;x<=n;x++)for(int y=j/2;y<=n/2+1;y++)    if(y%2==0)dp[i][j][x]+=w[y][j/2]*dp[i-1][y][x-j]%mol;ll ans=0;for(int i=1;i<=n;i++)ans+=dp[k][i][n];printf("%lld\n",ans%mol);                }            return 0;
}

法二:

采用记忆化搜索来解决这道题。

我们规定左子树必须正好满足要求,即左子树高度为y-1,而右子树高度小于等于y-1(如果左右子树高度不等,则左右子树可以互换,方案乘以2)然后我们用两个for循环分别枚举左子树的节点数与右子树的高度值(小于等于y-1),利用乘法原理状态转移。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll ,ll > P;
#define INF 0xf3f3f3f
const int Max=int(1000+10);
#define MOD 9901
bool bVis[212][112];
int dp[212][112];
int n, m;
int dfs(int cnt, int height)
{if (bVis[cnt][height]) return dp[cnt][height];if (cnt == 1) return height == 1;bVis[cnt][height] = true;if (height > (cnt + 1) / 2) return 0;if (height <= 1) return 0;int& state(dp[cnt][height]);for (int i(1); i < cnt; i += 2){for (int j(1); j < height; ++j){state += dfs(i, height - 1) * dfs(cnt - i - 1, j);state %= MOD;if (height - 1 != j)//如果高度相等,那么互换反而会导致方案重复(不妨试着模拟一下或者输出参数){state += dfs(i, height - 1) * dfs(cnt - i - 1, j);state %= MOD;}}}return state;
}int main()
{scanf("%d%d", &n, &m);printf("%d\n", dfs(n, m));return 0;
}

P1472 奶牛家谱 Cow Pedigrees相关推荐

  1. [USACO2.3]奶牛家谱 Cow Pedigrees

    [USACO2.3]奶牛家谱 Cow Pedigrees 题目 题目链接(luogu) 思路 dp,开始随便写了个dfs结果得了33分.看标签发现是dp,然后发现dp确实可行.(一下方法应该不是最优的 ...

  2. R语言ggplot2可视化绘制一头奶牛、Linux下使用cowsay打印奶牛(cow)

    R语言ggplot2可视化绘制一头奶牛.Linux下使用cowsay打印奶牛(cow) 目录 R语言ggplot2可视化绘制一头奶牛.Linux下使用cowsay打印奶牛

  3. USACO 2.3.2 Cow Pedigrees 奶牛家谱

    题目描述: 农民约翰准备购买一群新奶牛. 在这个新的奶牛群中, 每一个母亲奶牛都生两个小奶牛.这些奶牛间的关系可以用二叉树来表示.这些二叉树总共有N个节点(3 <= N < 200).这些 ...

  4. USACO / Cow Pedigrees(DP)

    农民约翰准备购买一群新奶牛. 在这个新的奶牛群中, 每一个母亲奶牛都生两个小奶牛.这些奶牛间的关系可以用二叉树来表示.这些二叉树总共有N个节点(3 <= N < 200).这些二叉树有如下 ...

  5. 奶牛家谱(动态规划)

    题目描述: 农民约翰准备购买一群新奶牛. 在这个新的奶牛群中, 每一个母亲奶牛都生两个小奶牛.这些奶牛间的关系可以用二叉树来表示.这些二叉树总共有N个节点(3 <= N < 200).这些 ...

  6. 【USACO 2.3.2】奶牛家谱

    [题目描述] 农民约翰准备购买一群新奶牛.在这个新的奶牛群中,每一个母亲奶牛都生两小奶牛.这些奶牛间的关系可以用二叉树来表示.这些二叉树总共有N个节点(3 <= N < 200).这些二叉 ...

  7. LUOGU P3024 [USACO11OPEN]奶牛跳棋Cow Checkers

    题目描述 One day, Bessie decides to challenge Farmer John to a game of 'Cow Checkers'. The game is playe ...

  8. usaco Cow Pedigrees

    已经到了不看题解无法下手的程度了.我根本想不到这是dp......不过我发现nocow这个东西挺好的上面提供了解题思路说的很详细往往一题给好几种方法,我这题就是根据那上面来的. /* ID:jinbo ...

  9. 奶牛排序 cow sort 置换群

    链接:https://ac.nowcoder.com/acm/contest/924/H 来源:牛客网 题目描述 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便 ...

最新文章

  1. 只允许对象生成于堆内
  2. js ajax 跨域问题 解决方案
  3. sparksql(3)——dataframe导入json-spark.read.json()
  4. python读取文件最后一行
  5. 只包含因子2 3 5的数(51nod 思维 打表)
  6. Thymeleaf th:include、th:replace使用
  7. leetcode - 931. 下降路径最小和
  8. 软件架构(7)---软件架构设计-五视图方法论
  9. arrive 和reach 的区别
  10. 小说采集,采集笔趣阁小说网站(www.biquges.cc)
  11. 学计算机的写论文题目,经典本科计算机论文选题 本科计算机论文题目怎样取...
  12. Python+Django+vue的旅游信息网站系统项目源码介绍
  13. 安利一款全网最牛还是免费的群控软件
  14. SQL2005安装及连接
  15. Meta研发触觉手套,有人想在元宇宙撸猫,有人产生大胆的想法
  16. Java算法:LeetCode算法Java版合集1111-1588题
  17. glove.840B.300d glove词向量词嵌入文件国内服务器下载
  18. 苹果cms怎么更换模板logo详细教程
  19. 参加门票6800的QCon大会,是怎样的体验?
  20. 使用支付宝实现零手续费跨行转帐。

热门文章

  1. qca9882 qca9880移植
  2. 关于DELL戴尔服务器安装系统是否需要引导盘的问题
  3. 修改我的世界服务器怪物爆率,精英生成概率以及部分能力参数设置_我的世界精英怪mod教程如何调控怪物属性和掉落物__单机攻略_跑跑车单机游戏网...
  4. 【Oracle SQL数据库-教学2】--- Oracle数据库基础
  5. Java架构师之旅(二十九 附录《MyBatis3 用户指南》中文版)
  6. 打破思维断层之KMP分析
  7. R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)...
  8. 使用k-means聚类anchors
  9. ABAP 发布webservice调用外部webservice
  10. ITSS资质办理流程是什么?