中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

wordpress大學(xué)主題下載地址恩施seo整站優(yōu)化哪家好

wordpress大學(xué)主題下載地址,恩施seo整站優(yōu)化哪家好,佛山企業(yè)網(wǎng)站制作公司,pt網(wǎng)站怎么下載與做【NOIP提高組】加分二叉樹 💐The Begin💐點點關(guān)注,收藏不迷路💐 設(shè)一個n個節(jié)點的二叉樹tree的中序遍歷為(l,2,3,…,n),其中數(shù)字1,2,3,…,n為節(jié)點編號。每個節(jié)點都有一個分?jǐn)?shù)(均為正整…

【NOIP提高組】加分二叉樹


💐The Begin💐點點關(guān)注,收藏不迷路💐

在這里插入圖片描述

設(shè)一個n個節(jié)點的二叉樹tree的中序遍歷為(l,2,3,…,n),其中數(shù)字1,2,3,…,n為節(jié)點編號。每個節(jié)點都有一個分?jǐn)?shù)(均為正整數(shù)),記第j個節(jié)點的分?jǐn)?shù)為di,tree及它的每個子樹都有一個加分,任一棵子樹subtree(也包含tree本身)的加分計算方法如下:
subtree的左子樹的加分× subtree的右子樹的加分+subtree的根的分?jǐn)?shù)
若某個子樹為主,規(guī)定其加分為1,葉子的加分就是葉節(jié)點本身的分?jǐn)?shù)。不考慮它的空
子樹。
試求一棵符合中序遍歷為(1,2,3,…,n)且加分最高的二叉樹tree。要求輸出;
(1)tree的最高加分
(2)tree的前序遍歷

輸入

第1行:一個整數(shù)n(n<30),為節(jié)點個數(shù)。
第2行:n個用空格隔開的整數(shù),為每個節(jié)點的分?jǐn)?shù)(分?jǐn)?shù)<100)。

輸出

第1行:一個整數(shù),為最高加分(結(jié)果不會超過4,000,000,000)。
第2行:n個用空格隔開的整數(shù),為該樹的前序遍歷。

樣例輸入

5
5 7 1 2 10

樣例輸出

145
3 1 2 4 5  

以下是用 C 語言實現(xiàn)的代碼:

#include <stdio.h>#define MAX_NODE 60// 定義最大節(jié)點數(shù)
int score[MAX_NODE][MAX_NODE]; // score 存儲子樹的最大加分
int midNode[MAX_NODE][MAX_NODE]; // midNode 存儲子樹最大加分時的根節(jié)點位置
int nodeVal[MAX_NODE]; // nodeVal 存儲節(jié)點的分?jǐn)?shù)
int numNodes; // numNodes 代表節(jié)點總數(shù)// 遞歸計算最大加分函數(shù)
int findMaxScore(int start, int end) {// 如果區(qū)間無效,返回 1if (start > end)return 1;// 如果已經(jīng)計算過該區(qū)間的最大加分,直接返回結(jié)果if (score[start][end])return score[start][end];// 如果區(qū)間只有一個節(jié)點,最大加分就是該節(jié)點的分?jǐn)?shù)if (start == end) {score[start][end] = nodeVal[start];} else {int tempScore;for (int i = start; i <= end; ++i) {// 遞歸計算左右子樹的最大加分并加上當(dāng)前節(jié)點的分?jǐn)?shù)tempScore = findMaxScore(start, i - 1) * findMaxScore(i + 1, end) + nodeVal[i];// 更新最大加分和對應(yīng)的中間節(jié)點if (tempScore > score[start][end]) {score[start][end] = tempScore;midNode[start][end] = i;}}}return score[start][end];
}// 輸出前序遍歷函數(shù)
void printPreorder(int start, int end) {// 如果區(qū)間無效,直接返回if (start > end)return;// 如果區(qū)間只有一個節(jié)點,直接輸出該節(jié)點if (start == end) {printf("%d ", start);} else {// 輸出中間節(jié)點printf("%d ", midNode[start][end]);// 遞歸輸出左子樹和右子樹printPreorder(start, midNode[start][end] - 1);printPreorder(midNode[start][end] + 1, end);}
}int main() {scanf("%d", &numNodes);for (int i = 1; i <= numNodes; ++i) {scanf("%d", &nodeVal[i]);}printf("%d\n", findMaxScore(1, numNodes));printPreorder(1, numNodes);return 0;
}

以下是用 C++實現(xiàn)的代碼:

#include <iostream>const int MAX_N = 60;// 定義最大節(jié)點數(shù)
int score[MAX_N][MAX_N]; // score 存儲子樹的最大加分
int midNode[MAX_N][MAX_N]; // midNode 存儲子樹最大加分時的根節(jié)點位置
int nodeVal[MAX_N]; // nodeVal 存儲節(jié)點的分?jǐn)?shù)
int numNodes; // numNodes 代表節(jié)點總數(shù)// 遞歸計算最大加分函數(shù)
int findMaxScore(int start, int end) {// 如果區(qū)間無效,返回 1if (start > end)return 1;// 如果已經(jīng)計算過該區(qū)間的最大加分,直接返回結(jié)果if (score[start][end])return score[start][end];// 如果區(qū)間只有一個節(jié)點,最大加分就是該節(jié)點的分?jǐn)?shù)if (start == end) {score[start][end] = nodeVal[start];} else {int tempScore;for (int i = start; i <= end; ++i) {// 遞歸計算左右子樹的最大加分并加上當(dāng)前節(jié)點的分?jǐn)?shù)tempScore = findMaxScore(start, i - 1) * findMaxScore(i + 1, end) + nodeVal[i];// 更新最大加分和對應(yīng)的中間節(jié)點if (tempScore > score[start][end]) {score[start][end] = tempScore;midNode[start][end] = i;}}}return score[start][end];
}// 輸出前序遍歷函數(shù)
void printPreorder(int start, int end) {// 如果區(qū)間無效,直接返回if (start > end)return;// 如果區(qū)間只有一個節(jié)點,直接輸出該節(jié)點if (start == end) {std::cout << start << " ";} else {// 輸出中間節(jié)點std::cout << midNode[start][end] << " ";// 遞歸輸出左子樹和右子樹printPreorder(start, midNode[start][end] - 1);printPreorder(midNode[start][end] + 1, end);}
}int main() {std::cin >> numNodes;for (int i = 1; i <= numNodes; ++i) {std::cin >> nodeVal[i];}std::cout << findMaxScore(1, numNodes) << std::endl;printPreorder(1, numNodes);return 0;
}

以下是用 Java 實現(xiàn)的代碼:

import java.util.Scanner;class BinaryTreeScoreCalculator {// 定義最大節(jié)點數(shù)private static final int MAX_N = 60;// 存儲子樹的最大加分static int[][] score = new int[MAX_N][MAX_N];// 存儲子樹最大加分時的根節(jié)點位置static int[][] midNode = new int[MAX_N][MAX_N];// 存儲節(jié)點的分?jǐn)?shù)static int[] nodeVal = new int[MAX_N];// 代表節(jié)點總數(shù)static int numNodes;// 遞歸計算最大加分函數(shù)static int findMaxScore(int start, int end) {// 如果區(qū)間無效,返回 1if (start > end)return 1;// 如果已經(jīng)計算過該區(qū)間的最大加分,直接返回結(jié)果if (score[start][end]!= 0)return score[start][end];// 如果區(qū)間只有一個節(jié)點,最大加分就是該節(jié)點的分?jǐn)?shù)if (start == end) {score[start][end] = nodeVal[start];} else {int tempScore;for (int i = start; i <= end; ++i) {// 遞歸計算左右子樹的最大加分并加上當(dāng)前節(jié)點的分?jǐn)?shù)tempScore = findMaxScore(start, i - 1) * findMaxScore(i + 1, end) + nodeVal[i];// 更新最大加分和對應(yīng)的中間節(jié)點if (tempScore > score[start][end]) {score[start][end] = tempScore;midNode[start][end] = i;}}}return score[start][end];}// 輸出前序遍歷函數(shù)static void printPreorder(int start, int end) {// 如果區(qū)間無效,直接返回if (start > end)return;// 如果區(qū)間只有一個節(jié)點,直接輸出該節(jié)點if (start == end) {System.out.print(start + " ");} else {// 輸出中間節(jié)點System.out.print(midNode[start][end] + " ");// 遞歸輸出左子樹和右子樹printPreorder(start, midNode[start][end] - 1);printPreorder(midNode[start][end] + 1, end);}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);numNodes = scanner.nextInt();for (int i = 1; i <= numNodes; ++i) {nodeVal[i] = scanner.nextInt();}System.out.println(findMaxScore(1, numNodes));printPreorder(1, numNodes);}
}

在這里插入圖片描述


💐The End💐點點關(guān)注,收藏不迷路💐
http://www.risenshineclean.com/news/54844.html

相關(guān)文章:

  • 17一起做網(wǎng)站普寧站免費推廣的方式
  • 懸停顯示 wordpress杭州seo關(guān)鍵詞優(yōu)化公司
  • 做電商網(wǎng)站一般需要什么流程谷歌seo是什么職業(yè)
  • 公司網(wǎng)站建設(shè)應(yīng)注意愛論壇
  • 網(wǎng)站開發(fā)需要用到的技術(shù)醴陵網(wǎng)站制作
  • 遼寧網(wǎng)站建設(shè)多少錢活動推廣文案
  • 廣告做圖網(wǎng)站廣州新聞發(fā)布
  • axure做的網(wǎng)站sem競價推廣怎么做
  • 做網(wǎng)站賭博的網(wǎng)站手機優(yōu)化
  • 蘭州網(wǎng)站seo費用企業(yè)品牌推廣策劃方案
  • pHP可以做論壇網(wǎng)站嗎如何去除痘痘效果好
  • 電子商務(wù) 網(wǎng)站開發(fā)手機百度安裝下載
  • 鄭州官網(wǎng)網(wǎng)站推廣優(yōu)化公司品牌廣告和效果廣告的區(qū)別
  • 網(wǎng)站內(nèi)頁百度不收錄seo整站優(yōu)化公司持續(xù)監(jiān)控
  • 網(wǎng)站的聯(lián)系我們怎么做深圳外貿(mào)網(wǎng)絡(luò)推廣渠道
  • 谷歌seo優(yōu)化排名搜索網(wǎng)站排名優(yōu)化
  • 移動端網(wǎng)站建設(shè)費用軟件開發(fā)
  • 網(wǎng)站改版seo建議百度推廣如何代理加盟
  • 網(wǎng)站網(wǎng)站建設(shè)設(shè)計seo推廣有哪些
  • 香港免費域名seo網(wǎng)站優(yōu)化培訓(xùn)找哪些
  • web網(wǎng)站開發(fā)基本流程圖黃岡網(wǎng)站seo
  • 重慶忠縣網(wǎng)站建設(shè)公司哪家專業(yè)幽默廣告軟文案例
  • 做網(wǎng)站需要網(wǎng)絡(luò)服務(wù)器深圳網(wǎng)站建設(shè)專業(yè)樂云seo
  • 成都蜀美網(wǎng)站建設(shè)徐州網(wǎng)站建設(shè)
  • 美容院網(wǎng)站源碼seo搜索引擎優(yōu)化名詞解釋
  • 遼寧建設(shè)廳新網(wǎng)站個人免費開發(fā)網(wǎng)站
  • 完善旅游網(wǎng)站的建設(shè)網(wǎng)站制作建設(shè)公司
  • 想做網(wǎng)站去哪里做百度灰色關(guān)鍵詞排名技術(shù)
  • 白云區(qū)建網(wǎng)站常用的網(wǎng)絡(luò)推廣手段有哪些
  • 企業(yè)網(wǎng)站建設(shè)費用深圳免費外鏈生成器