加分二叉樹(codevs 1090)

來源:互聯網
上載者:User

標籤:color   計算   const   ==   整數   tput   程式   ane   com   

題目描述 Description

設一個n個節點的二叉樹tree的中序遍曆為(l,2,3,…,n),其中數字1,2,3,…,n為節點編號。每個節點都有一個分數(均為正整數),記第j個節點的分數為di,tree及它的每個子樹都有一個加分,任一棵子樹subtree(也包含tree本身)的加分計算方法如下:

subtree的左子樹的加分× subtree的右子樹的加分+subtree的根的分數

若某個子樹為主,規定其加分為1,葉子的加分就是分葉節點本身的分數。不考慮它的空

子樹。

試求一棵符合中序遍曆為(1,2,3,…,n)且加分最高的二叉樹tree。要求輸出;

(1)tree的最高加分

(2)tree的前序走訪

 

 

現在,請你協助你的好朋友XZ設計一個程式,求得正確的答案。

輸入描述 Input Description

第1行:一個整數n(n<=30),為節點個數。

第2行:n個用空格隔開的整數,為每個節點的分數(分數<=100)

輸出描述 Output Description

第1行:一個整數,為最高加分(結果不會超過4,000,000,000)。

第2行:n個用空格隔開的整數,為該樹的前序走訪。

範例輸入 Sample Input

5

5 7 1 2 10

範例輸出 Sample Output

145

3 1 2 4 5

資料範圍及提示 Data Size & Hint

n(n<=30)

分數<=100

 

 

 

code

#include<stdio.h>#include<algorithm>using namespace std;const int MX=101;int n,f[MX][MX],root[MX][MX];int serch(int l,int r)  {    int k,now,ans;    if(l>r) return 1;    if(f[l][r]==-1) for(k=l;k<=r;++k) {        now=serch(l,k-1)*serch(k+1,r)+f[k][k];        if(now>f[l][r]) {            f[l][r]=now;            root[l][r]=k;        }    }    return f[l][r];}bool flag=1;void dfs(int l,int r)  {    if(l>r) return ;    if(flag) flag=0;    else printf(" ");    printf("%d",root[l][r]);    dfs(l,root[l][r]-1);    dfs(root[l][r]+1,r);}int main() {    scanf("%d",&n);    for(int i=1;i<=n;++i)         for(int j=i;j<=n;++j)             f[i][j]=-1;     for(int i=1;i<=n;++i) {        scanf("%d",&f[i][i]);        root[i][i]=i;    }    printf("%d\n",serch(1,n));    dfs(1,n);    return 0;}

 

加分二叉樹(codevs 1090)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.