又是一道樹形dp的入門題,思想非常簡單 然而我最開始還是存了兩個狀態
[傳送門]
小明對數學飽有興趣,並且是個勤奮好學的學生,總是在課後留在教室向老師請教一些問題。一天他早晨騎車去上課,路上見到乙個老伯正在修剪花花草草,頓時想到了乙個有關修剪花卉的問題。於是當日課後,小明就向老師提出了這個問題:
一株奇怪的花卉,上面共連有nn朵花,共有n-1n−1條枝幹將花兒連在一起,並且未修剪時每朵花都不是孤立的。每朵花都有乙個「美麗指數」,該數越大說明這朵花越漂亮,也有「美麗指數」為負數的,說明這朵花看著都讓人噁心。所謂「修剪」,意為:去掉其中的一條枝條,這樣一株花就成了兩株,扔掉其中一株。經過一系列「修剪「之後,還剩下最後一株花(也可能是一朵)。老師的任務就是:通過一系列「修剪」(也可以什麼「修剪」都不進行),使剩下的那株(那朵)花卉上所有花朵的「美麗指數」之和最大。
老師想了一會兒,給出了正解。小明見問題被輕易攻破,相當不爽,於是又拿來問你。
輸入格式:
第一行乙個整數n(1 ≤ n ≤ 16000)n(1≤n≤16000)。表示原始的那株花卉上共nn朵花。
第二行有nn個整數,第ii個整數表示第ii朵花的美麗指數。
接下來n-1n−1行每行兩個整數a,ba,b,表示存在一條連線第aa 朵花和第bb朵花的枝條。
輸出格式:
乙個數,表示一系列「修剪」之後所能得到的「美麗指數」之和的最大值。保證絕對值不超過21474836472147483647。
樣例輸入:
7-1 -1 -1 1 1 1 0
1 42 5
3 64 7
5 76 7
樣例輸出:
如你所見這是一道背景略顯智障非常好的題,我們來簡化一下題目:
給定乙個多叉樹,每個點有乙個權值。現在要做的就是保留或者不保留每個點,並且如果a是b和c的父節點,如果不保留a,那麼b和c也不能保留。
那麼我們需要求的就是最後能夠保留的最大值。
於是最開始我是這麼想的用f[u][0/1]來表示u節點的去留時所在子樹的最大值,然後我弄完之後,因為智障而搞錯了答案的儲存,然後debug後突然想。。。既然0表示不選,那我為什麼還要定義乙個狀態?????
看來是我沙雕了。
那麼既然定義出來了,就非常容易想到**,**如下:
qaq【正在糾結買不買無限正義高達。。。。。。。】
洛谷P1122 最大子樹和(樹形dp dfs)
2020.5.21 萌新自從上次區域賽那題碰壁,就勵志學好樹形dp,先從簡單題練練手。樹形結構,前向星自不用說,觀察給出的資料,在每一層的子問題是剪枝和不剪枝,那肯定是如果對答案貢獻大於零就不剪,小於0就剪掉,所以有如下公式 dp u dp v 0?dp v 0回到問題上,我們的子樹可能不止乙個,那...
P1122 最大子樹和 (樹形DP)
第一次寫樹形dp,找了乙個簡單的題,先熟悉一下套路,雖然自己的這種寫法,過了,可以求到最大的子樹和,但是不能求到每個結點的最大子樹和,只有某一部分的最大子樹和的根,它是正確的,其他結點都是打工仔。遞迴下去,以子樹推當前結點和子樹的最優值,是可以辦到的 情況1 如果當前子樹 0,就不更新 情況2 如果...
洛谷P1122 最大子樹和 (樹狀dp)
小明對數學飽有興趣,並且是個勤奮好學的學生,總是在課後留在教室向老師請教一些問題。一天他早晨騎車去上課,路上見到乙個老伯正在修剪花花草草,頓時想到了乙個有關修剪花卉的問題。於是當日課後,小明就向老師提出了這個問題 一株奇怪的花卉,上面共連有n 朵花,共有n 1條枝幹將花兒連在一起,並且未修剪時每朵花...