<html>

來源:互聯網
上載者:User

標籤:方法   current   color   公眾號   length   hdu   tor   推薦   pretty   

pid=5370">題目連結:hdu 5370 Tree Maker


n個節點的二叉樹種類為Catalan數的第n項

對於一棵子樹而言,被移動過的節點就是確定的位置。所以僅僅要知道已經確定位置的K個節點有多少個空孩子指標M,和就該子樹下的N個未確定位置的節點,等於是說用N個節點構造M個可為空白的子樹的種類數。對於整個樹的形態數即為若干棵獨立的子樹形態數的乘積。

定義dp[i][j]為用i個節點構造j棵樹的形態數。dp[i][j] = sum{ dp[i-1][j-k] * catalan[k] | 0 ≤ k ≤j }, 用o(n^3)的複雜度預先處理出dp數組。然後類比操作後計算出每一個子樹的M和N。


#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const int maxn = 505;const int mod = 1e9 + 7;int dp[maxn][maxn], catalan[maxn];void preserve () {catalan[0] = catalan[1] = 1;for (int i = 2; i <= 500; i++) {for (int j = 0; j < i; j++)catalan[i] = (catalan[i] + (ll) catalan[j] * catalan[i-j-1]) % mod;}dp[0][0] = 1;for (int i = 1; i <= 500; i++) {for (int j = 0; j <= 500; j++) {for (int k = 0; k <= j; k++)dp[i][j] = (dp[i][j] + (ll) dp[i-1][j-k] * catalan[k]) % mod;}}}int N, M, far[maxn], son[maxn][2], idx[maxn], cnt[maxn], sum[maxn];inline int newNode (int f) {M++;cnt[M] = son[M][0] = son[M][1] = 0;far[M] = f;return M;}void init () {M = 0;int u = newNode(1), t, k;idx[u] = M;for (int i = 1; i <= N; i++) {scanf("%d", &t);if (t == 0)u = far[u];else if (t <= 2) {if (son[u][t-1] == 0) {son[u][t-1] = newNode(u);idx[son[u][t-1]] = idx[u];cnt[idx[u]]--;}u = son[u][t-1];} else {scanf("%d", &k);son[u][t-3] = newNode(u);cnt[son[u][t-3]] = k - 1;idx[son[u][t-3]] = son[u][t-3];}}memset(sum, 0, sizeof(sum));for (int i = 1; i <= M; i++) {if (son[i][0] == 0)sum[idx[i]]++;if (son[i][1] == 0)sum[idx[i]]++;}}int solve () {int ret = 1;for (int i = 1; i <= M; i++) {if (idx[i] != i)continue;ret = (ll) ret * dp[sum[i]][cnt[i]] % mod;}return ret;}int main () {preserve();int cas = 1;while (scanf("%d", &N) == 1) {init ();printf("Case #%d: %d\n", cas++, solve ());}return 0;}


閱讀全文 著作權聲明:本文為博主原創文章,未經博主同意不得轉載。 舉報
  • 標籤:
  • 本文已收錄於下面專欄:
0條評論
相關文章推薦
hdu-1267 下沙的沙子有幾粒 DP/Catalan 題目連結:hdu 5370 Tree Makern個節點的二叉樹種類為Catalan數的第n項對於一棵子樹而言。被移動過的節點就是確定的位置。所以僅僅要知道已經確定位置的K個節點有多少個...
  • hss871838309
  • 2012-03-01 15:06
  • 501
hdu 4359 Easy Tree DP? Best solutions forProblem 4359<div align="right" style="font-family: Arial; font-size: 12px; f
  • java-mans
  • 2012-08-10 14:09
  • 370
HDU-4714 Tree2cycle(樹型dp) 題目連結:hdu 5370 Tree Makern個節點的二叉樹種類為Catalan數的第n項對於一棵子樹而言。被移動過的節點就是確定的位置,所以僅僅要知道已經確定位置的K個節點有多少個...
  • qq_31759205
  • 昨天 00:20
  • 11
hdu 1023 Train Problem II catalan數列 大數乘除 Train Problem IITime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2714Accepted Submission(s): 1517</str
  • hulunberbus
  • 2012-02-28 17:44
  • 385
HDU5370 Tree Maker 題目連結:hdu 5370 Tree Makern個節點的二叉樹種類為Catalan數的第n項對於一棵子樹而言,被移動過的節點就是確定的位置,所以僅僅要知道已經確定位置的K個節點有多少個...
  • kyleyoung_ymj
  • 2016-06-28 15:52
  • 184
poj 2378 Tree Cutting(樹形dp) 本文出自 <a target="_blank" href="http://blog.csdn.net/shuangde800" style="color: rgb(202,0,0);
  • king_tt
  • 2013-08-31 14:31
  • 386
2017多校第3場 HDU 6065 RXD, tree and sequence LCA,DP 題目連結:hdu 5370 Tree Makern個節點的二叉樹種類為Catalan數的第n項對於一棵子樹而言,被移動過的節點就是確定的位置,所以僅僅要知道已經確定位置的K個節點有多少個...
  • just_sort
  • 5天前 09:08
  • 35
ural 1018 Binary Apple Tree(樹形dp | 經典) 本文
  • king_tt
  • 2013-09-02 00:49
  • 325
hdu-1267 下沙的沙子有幾粒 DP/Catalan 糾結 的題啊ACMStep的2.3.8在2.3裡一看題就往Catalan數上想了 非常欣喜的推匯出了公式:C[m][n]=(m-n+1)/n*C[m][n-1];C[m][0]=1;當中。m是D能夠放置的位置數。

最後用大數的處理方式計算出了結果 提交後WA嗄 愣是想了半天不知道為何嗄最後的最後 找了himdd的博文,發現能夠用DP的思想。解法一:DP代碼及解析例如以下:#include&lt;iost

  • java-mans
  • 2012-03-01 15:06
  • 423
HDU 6035 Colorful Tree(樹形dp) 題目連結:hdu 5370 Tree Makern個節點的二叉樹種類為Catalan數的第n項對於一棵子樹而言,被移動過的節點就是確定的位置,所以僅僅要知道已經確定位置的K個節點有多少個...
  • addkai
  • 2017-07-29 18:11
  • 20
不慌不忙、不急不躁 +關注
原創
304
粉絲
12
喜歡
0
  • hdu 5876 Sparse Graph(BFS+並查集)
  • hdu 5875 Function(高效)
  • hdu 5593 ZYB's Tree(樹形dp)
  • hdu 5592 ZYB's Premutation(線段樹)
很多其它文章 線上課程
【直播】機器學習&資料採礦7周實訓--韋瑋
【套餐】系統整合專案管理project師順利通關--徐朋
  • 檔案夾
  • 喜歡 取消愛好
  • 收藏
  • 分享 微博 QQ
收藏助手 不良資訊舉報

<html>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.