日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

1603 限高二叉排列树(计数DP)

發(fā)布時(shí)間:2023/12/15 79 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1603 限高二叉排列树(计数DP) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1603?限高二叉排列樹(shù) 題目來(lái)源:?CodeForces 基準(zhǔn)時(shí)間限制:1?秒 空間限制:131072?KB 分值:?40?難度:4級(jí)算法題

作為游戲魔方的編寫(xiě)者和管理員,Bob在很多主存模塊中檢測(cè)游戲魔方,并且Bob從未被用戶打敗,同時(shí)他也經(jīng)常和游戲魔方作戰(zhàn)。

然而,不愉快的事情發(fā)生了,游戲《失落的洛杉磯》崩潰了,由于出現(xiàn)了一個(gè)非常可惡的病毒——“十六進(jìn)制”,它非常奇怪,并且非常喜歡玩,因此,Bob必須先和它玩,才能和別人玩。

此次“十六進(jìn)制”發(fā)明了以下游戲:Bob必須通過(guò)一些有n個(gè)節(jié)點(diǎn)的二叉搜索樹(shù),二叉搜索樹(shù)是一顆二叉樹(shù),每個(gè)節(jié)點(diǎn)有一個(gè)唯一的關(guān)鍵字。我們來(lái)說(shuō)一下二叉搜索樹(shù)的性質(zhì),以下規(guī)則在每個(gè)節(jié)點(diǎn)上都成立:每個(gè)節(jié)點(diǎn)的關(guān)鍵字都大于左子樹(shù)上的所有節(jié)點(diǎn)的關(guān)鍵字,都小于右子樹(shù)上所有節(jié)點(diǎn)的關(guān)鍵字。每個(gè)關(guān)鍵字都是從1~n的不同的正整數(shù)。每棵樹(shù)上的所有節(jié)點(diǎn)都最多有兩個(gè)子節(jié)點(diǎn),或者沒(méi)有子節(jié)點(diǎn)(在這種情況下的節(jié)點(diǎn)被稱為葉子節(jié)點(diǎn))。

在“十六進(jìn)制”的游戲中,所有的樹(shù)都是不同的,但是每棵樹(shù)的高度都不低于h。在此問(wèn)題中,“高度”指的是從根節(jié)點(diǎn)到最遠(yuǎn)的葉子節(jié)點(diǎn)的最多節(jié)點(diǎn)數(shù)(包含葉子節(jié)點(diǎn)和根節(jié)點(diǎn))。當(dāng)Bob跳過(guò)一棵樹(shù)的后,這棵樹(shù)會(huì)消失。當(dāng)所有的樹(shù)都消失了,Bob就通過(guò)了游戲魔方。他想知道在最壞的情況下,他必須跳過(guò)多少棵樹(shù),你能幫助他嗎?

Input 單組測(cè)試數(shù)據(jù) 輸入數(shù)據(jù)包含兩個(gè)以空格隔開(kāi)的正整數(shù)n和h?(1<=n<=35,1<=h<=?n)?。 Output 輸出一個(gè)整數(shù)表示問(wèn)題的答案。題目保證這個(gè)整數(shù)不超過(guò)9*10^18。 Input示例 3?2 Output示例 5


//對(duì)于DP還是不夠強(qiáng)啊,想到一部分,但還是沒(méi)有找到狀態(tài)方程
按理說(shuō),性質(zhì)很容易發(fā)現(xiàn),二叉搜索樹(shù),如果根節(jié)點(diǎn)確定,那么,左右樹(shù)的節(jié)點(diǎn)數(shù)就一定了
然而我想的是dp[i][j]為根為 i ,j 高度的種數(shù),然后思索了半天,發(fā)現(xiàn)并不好dp,唉
假如 dp[i][j] 是 i 個(gè)節(jié)點(diǎn),高度小于等于 j 的個(gè)數(shù)的話,就非常好做了、、、
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 #define LL long long 5 #define eps 1e-8 6 #define MX 40 7 8 int n,h; 9 LL dp[MX][MX]; 10 11 int main() 12 { 13 while (scanf("%d%d",&n,&h)!=EOF) 14 { 15 memset(dp,0,sizeof(dp)); 16 for (int i=0;i<=n;i++) 17 dp[0][i]=1; 18 for (int i=1;i<=n;i++) 19 for (int j=1;j<=n;j++) 20 for (int k=1;k<=i;k++) 21 dp[i][j]+=dp[k-1][j-1]*dp[i-k][j-1]; 22 printf("%lld\n",dp[n][n]-dp[n][h-1]); 23 } 24 return 0; 25 } View Code

?




轉(zhuǎn)載于:https://www.cnblogs.com/haoabcd2010/p/7545033.html

總結(jié)

以上是生活随笔為你收集整理的1603 限高二叉排列树(计数DP)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。