日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯节点选择(java)第一道树形dp分析

發(fā)布時間:2025/3/20 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯节点选择(java)第一道树形dp分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

藍(lán)橋杯 節(jié)點(diǎn)選擇

問題描述
有一棵 n 個節(jié)點(diǎn)的樹,樹上每個節(jié)點(diǎn)都有一個正整數(shù)權(quán)值。如果一個點(diǎn)被選擇了,那么在樹上和它相鄰的點(diǎn)都不能被選擇。求選出的點(diǎn)的權(quán)值和最大是多少?

輸入格式
第一行包含一個整數(shù) n 。

接下來的一行包含 n 個正整數(shù),第 i 個正整數(shù)代表點(diǎn) i 的權(quán)值。

接下來一共 n-1 行,每行描述樹上的一條邊。

輸出格式
輸出一個整數(shù),代表選出的點(diǎn)的權(quán)值和的最大值。
樣例輸入
5
1 2 3 4 5
1 2
1 3
2 4
2 5
樣例輸出
12
樣例說明
選擇3、4、5號點(diǎn),權(quán)值和為 3 4 5 = 12 。
數(shù)據(jù)規(guī)模與約定
對于20%的數(shù)據(jù), n <= 20。

對于50%的數(shù)據(jù), n <= 1000。

對于100%的數(shù)據(jù), n <= 100000。

權(quán)值均為不超過1000的正整數(shù)。

分析

  • 看到藍(lán)橋杯的樹形dp題,剛開始看的很蒙蔽。從來沒做過樹形的dp,剛開始表示很難理解,當(dāng)時主要的疑惑點(diǎn)有一下幾點(diǎn):
    1:這個樹怎么解決?這么亂的一棵樹感覺根本無法下手,因為你不知道那個是根節(jié)點(diǎn),那個是子節(jié)點(diǎn)。輸出的結(jié)果又和那個有關(guān)系?
    2:樹形怎么dp?以前都是遇到線性區(qū)間的dp,樹形dp,怎么查找連續(xù)點(diǎn),就算找到連續(xù)的點(diǎn)交叉點(diǎn)如何處理?
  • 看了一些博客和文章之后,有了解到dp處理樹形的特殊手段:
    : 一般來說,樹形dp的每個節(jié)點(diǎn)都有一個選擇性,本題就是該店選擇和不選擇,dp[i][0]表示不選擇,dp[i][1]表示選擇該節(jié)點(diǎn)。
    :對于樹形dp,一般要和搜索結(jié)合(更確切的說是遞歸)結(jié)合,對于樹的劃分層次,一般是選擇一個點(diǎn),然后從這個點(diǎn)進(jìn)行往下搜索 ,他的鄰居都變成他的子節(jié)點(diǎn)。也就是相當(dāng)于從這個根節(jié)點(diǎn)除法,可能有很多分叉。也就是有很多分叉會到根節(jié)點(diǎn)。但是這有和dp有啥關(guān)系呢?dp是從尾到頭還是從頭到尾?
    :對于順序的選擇肯定是從尾部到頂部,因為dp要的是一個整合結(jié)果而不是分散求最值或者其他。那么還有問題就是那么多的跟節(jié)點(diǎn),那么多合的點(diǎn),還有反向路徑不好記錄,記錄的難度和開銷都超級大。如果從尾部推到dp還是有一定難度。
    :我們要先拋開整體看局部這個點(diǎn),對于某個單點(diǎn)來說(如果他是頭節(jié)點(diǎn)),分析到他的結(jié)果,如果取他那么他的兒子們都不能取,那么dp[i][1]=dp[兒子們][0] value[i];如果不取他,那么對于每個兒子來說要給最大的,那么dp[i][0]=max(dp[每個兒子][0],dp[每個兒子][1]);這樣就得到遞推式dp[x][0]=sum(max(dp[num][0],dp[num][1]));dp[x][1]=sum(dp[num][0]) value[i].
    :對于頭節(jié)點(diǎn)(可以任選),滿足④,對于頭節(jié)點(diǎn)的兒子也同樣滿足④,但是唯一不同的是要過濾頭節(jié)點(diǎn)(準(zhǔn)確的說是父節(jié)點(diǎn))。防止死循環(huán)。遞歸搜索的過程是雙向的過程,先去再回,我們可以同過先去構(gòu)造樹并且獲得后面的一些信息,然后根據(jù)后來得到的值進(jìn)行操作當(dāng)前等級的dp。
  • 總的來說這個樹形dp就是分析某個點(diǎn)的狀態(tài)方程,通過遞歸搜索進(jìn)行劃分樹。獲得結(jié)果。并且這題只有n-1條路徑,n個點(diǎn),不用考慮去重。
    附上代碼:
package 算法訓(xùn)練;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StreamTokenizer; import java.util.ArrayList; import java.util.List; public class 節(jié)點(diǎn)選擇 {// static boolean jud[];static int dp[][];//dp數(shù)組static int value[];//保存權(quán)值static List <Integer>[]list;//鄰接表儲存圖。節(jié)省空間public static void main(String[] args) throws IOException {// TODO 自動生成的方法存根StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));in.nextToken();int n=(int)in.nval;value=new int[n];//權(quán)值dp=new int[n][2];list=new ArrayList[n];for(int i=0;i<n;i++) {list[i]=new ArrayList<>();}for(int i=0;i<n;i++){in.nextToken();value[i]=(int)in.nval;}for(int i=0;i<n-1;i++){in.nextToken(); int t1=(int)in.nval;in.nextToken();int t2=(int)in.nval;list[t1-1].add(t2-1);//添加路徑list[t2-1].add(t1-1); }dfs(0,-1);//理論上任意n之內(nèi)節(jié)點(diǎn)都可以,但是右側(cè)第一個理論上保證不是這個點(diǎn)的父親int value=max(dp[0][0], dp[0][1]);out.println(value);out.flush();}private static void dfs(int x, int y) {//當(dāng)前節(jié)點(diǎn),父親節(jié)點(diǎn)for(int i=0;i<list[x].size();i++){int num=list[x].get(i);if(num!=y)//不是父親節(jié)點(diǎn){dfs(num,x);dp[x][0]+=max(dp[num][0],dp[num][1]);dp[x][1]+=dp[num][0];}}dp[x][1]+=value[x];//加上自己的權(quán)值}private static int max(int i, int j) {// TODO 自動生成的方法存根return i>=j?i:j;}}

但是結(jié)果只能過7個,

看了下其他人沒優(yōu)化輸入的只能過5個超時。我用測試數(shù)據(jù)測試了一下原因是棧內(nèi)存溢出。苦逼的Java。。

也可能是因為我比較菜,,想不出好的方法,呵呵,。歡迎大佬踢場。。

總結(jié)

以上是生活随笔為你收集整理的蓝桥杯节点选择(java)第一道树形dp分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 成人毛片在线播放 | 97理伦 | 91一区二区在线 | 午夜激情欧美 | 超碰免费在线播放 | 色戒av | 日本少妇xxxx软件 | 男女啪啪十八 | 人人干人人艹 | 中文字幕日产av | 欧美激情五月 | 日本免费中文字幕 | 在线视频一区二区三区四区 | 很黄很污的视频网站 | 无码人妻久久一区二区三区 | 最近的中文字幕在线看视频 | 色屁屁一区二区三区 | 秋霞二区| 国产九九热视频 | 韩国av在线播放 | 夜夜夜操操操 | 国产精品视频久久久 | 久久免费少妇高潮久久精品99 | 男女做爰真人视频直播 | 国产高中女学生第一次 | 日本成人免费在线视频 | 韩国一区二区三区视频 | 亚洲国产v | 医生强烈淫药h调教小说视频 | 在线观看h网站 | 久久久久久久久久久福利 | 蜜臀av性久久久久蜜臀av麻豆 | 久久久黄色片 | 在线视频激情小说 | 波多野结衣www | 自拍偷自拍亚洲精品播放 | 91爱| 黄色伊人 | 国产人人射| 国产一及毛片 | 亚洲精品天堂在线观看 | 超级变态重口av番号 | 99精品毛片 | 播播成人网 | 亚洲av无码一区二区三区网站 | 久久99久久精品 | 美妇av | 999视频在线| 波多野结衣av一区二区全免费观看 | 国产二三区 | 69视频免费| 三级国产网站 | 国产精品影音先锋 | 天天干天天插 | 骚鸭av| 一区二区免费av | 中文字幕无线精品亚洲乱码一区 | 各种含道具高h调教1v1男男 | 欧美精品videos另类 | 亚洲一级影院 | 高清一区二区三区四区五区 | 久久神马影院 | chinese精品自拍hd | 一本一道人人妻人人妻αv 九一在线视频 | 亚洲免费在线观看 | 欧美福利视频在线观看 | 伊人天堂在线 | 夜夜操网站 | 日韩黄网站 | 久热在线视频 | 三级黄色av| 国产高潮av| av片免费| 日韩欧美国产一区二区 | 娇妻玩4p被三个男人伺候电影 | 好吊日精品视频 | 尤物精品视频在线观看 | 黄色网页网站 | 香蕉视频一级片 | 亚洲精品久久久久久动漫器材一区 | 性欧美一级 | 大肉大捧一进一出好爽 | 穿情趣内衣被c到高潮视频 欧美性猛交xxxx黑人猛交 | 一区二区在线免费观看 | 欧美第一精品 | 热久久网站 | 天天干天天操天天舔 | 精品无码一区二区三区免费 | 久久99精品久久久久久三级 | 日韩精品一区二区三区在线观看 | 精品一区二区三区在线视频 | 日韩五月| 久久网中文字幕 | 日本特级毛片 | 久久国产这里只有精品 | 亚洲欧洲视频在线观看 | 91一区二区三区 | 国产东北女人做受av | 色综合图区 |