CS 300 BST Fixed Height DP(前缀和)
来源:互联网 发布:华润电力 知乎 编辑:程序博客网 时间:2024/06/16 17:28
CS 300
题意:问有多少种形态不同,n个节点,高度为H的二叉树. n,h<=500.
dp[i][j]:i个节点 高度为j的二叉树的方法数.
枚举其中一个子树的节点数为k,dp[i][j]+=dp[k][0~j-1]*dp[i-1-k][j-1];
注意两课子树的高度有3种情况 (左=j-1,右<j-1),(左<j-1,右=j-1),(左=右=j-1).
用pre[i][j]记录 dp[i][0]+dp[i][1]+..dp[i][j]. O(N^3) TLE.....要加mod换成减法好像才能过.
法2:设dp[i][j] i个节点 高度不超过j的方法数. 最后答案为dp[n][h]-dp[n][h-1].
题意:问有多少种形态不同,n个节点,高度为H的二叉树. n,h<=500.
dp[i][j]:i个节点 高度为j的二叉树的方法数.
枚举其中一个子树的节点数为k,dp[i][j]+=dp[k][0~j-1]*dp[i-1-k][j-1];
注意两课子树的高度有3种情况 (左=j-1,右<j-1),(左<j-1,右=j-1),(左=右=j-1).
用pre[i][j]记录 dp[i][0]+dp[i][1]+..dp[i][j]. O(N^3) TLE.....要加mod换成减法好像才能过.
法2:设dp[i][j] i个节点 高度不超过j的方法数. 最后答案为dp[n][h]-dp[n][h-1].
dp[i][j]= dp[k][j-1]*dp[i-1-k][j-1] [k=0..i-1].省略掉了前缀和化解的步骤.very nice.
TLE代码
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=5e2+50,mod=1e9+7;ll dp[N][N],pre[N][N];int main(){ int n,h; scanf("%d%d",&n,&h); dp[0][0]=1; for(int i=0;i<=h;i++) pre[0][i]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=h;j++) { for(int k=0;k<=i-1;k++) { dp[i][j]=(dp[i][j]+pre[k][j-1]*dp[i-1-k][j-1]%mod)%mod; dp[i][j]=(dp[i][j]+dp[k][j-1]*pre[i-1-k][j-1]%mod)%mod; dp[i][j]=(dp[i][j]-dp[k][j-1]*dp[i-1-k][j-1]%mod+mod)%mod; } // cout<<i<<' '<<j<<' '<<dp[i][j]<<endl; pre[i][j]=(pre[i][j-1]+dp[i][j])%mod;// } } printf("%lld\n",dp[n][h]); return 0;}
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=5e2+5,mod=1e9+7;ll dp[N][N],pre[N][N];int main(){ int n,h; scanf("%d%d",&n,&h); dp[0][0]=1; for(int i=0;i<=h;i++) dp[0][i]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=h;j++) { for(int k=0;k<=i-1;k++) { dp[i][j]=(dp[i][j]+dp[k][j-1]*dp[i-1-k][j-1]%mod)%mod; } } } printf("%lld\n",(dp[n][h]-dp[n][h-1]+mod)%mod); return 0;}
阅读全文
0 0
- CS 300 BST Fixed Height DP(前缀和)
- CS R14 C(模拟+二维前缀和) ,D(好题,前缀第i位异或+滑动区间),E(树计数+DP(前缀和优化))
- 【CS 1373】射命丸文(二维前缀和)
- cfStar sky DP(前缀和)
- zoj 1074 前缀和+dp
- hdu6186-思维&前缀和&后缀和-CS Course
- HDU6186 | 2017广西邀请赛 CS Course (前缀和后缀)
- 子段和分类 前缀和 dp
- CS 300 Switch the Lights 观察+前缀差分
- [BZOJ1177]APIO2009 Oil|前缀和|DP|分类
- [bzoj1084][DP][前缀和]最大子矩阵
- HDU 5550 dp + 前缀和优化
- CDOJ 1307 ABCDE dp, 前缀和优化
- height和line-height
- spoj8549 BST again dp
- 最大子矩阵和(n^2*m,dp,前缀和)
- [51nod 1051 最大子矩阵和]前缀和+dp
- 2017广西邀请赛/hdu6186 CS Course (维护前缀和后缀)
- Android设计模式--单例模式
- poj3984 迷宫问题(广搜C+深搜C++)
- elastic-job监控平台搭建
- 1072. 开学寄语
- iOS11拍照闪退,保存图片闪退问题
- CS 300 BST Fixed Height DP(前缀和)
- 分享一个兼容多设备的蓝牙Lib框架封装思想(二)
- JavaScript和Java的区别
- C++ virtual用法
- NOIP2017 赛前总结
- c++基础之main函数的参数和返回值
- 完美居中
- win7下制作ubuntu安装u盘
- Spring Cloud介绍