Week13作業 選做題D

2021-10-06 08:29:41 字數 1504 閱讀 3978

題意:

在大家的三連助攻下,tt 一舉獲得了超級多的貓咪,因此決定開一間貓咖,將快樂與大家一同分享。並且在開業的那一天,為了紀念這個日子,tt 在貓咖門口種了一棵蘋果樹。

一年後,蘋果熟了,到了該摘蘋果的日子了。已知樹上共有 n 個節點,每個節點對應乙個快樂值為 w[i] 的蘋果,為了可持續發展,tt 要求摘了某個蘋果後,不能摘它父節點處的蘋果。

tt 想要令快樂值總和盡可能地大,你們能幫幫他嗎?

input:

結點按 1~n 編號。

第一行為 n (1 ≤ n ≤ 6000) ,代表結點個數。

接下來 n 行分別代表每個結點上蘋果的快樂值 w[i](-128 ≤ w[i] ≤ 127)。

接下來 n-1 行,每行兩個數 l k,代表 k 是 l 的乙個父節點。

輸入有多組,以 0 0 結束

output:

每組資料輸出乙個整數,代表所選蘋果快樂值總和的最大值。

sample input:71

1111

111 37 4

2 34 5

6 43 5

0 0sample output:

5思路:

這是一道樹形dp題。

dp[i][j]表示以i為根節點的子樹的快樂值,j=0表示不選這棵樹,j=1表示選擇選擇這棵樹。用到了遞迴的思想,答案的最後結果應該是max(dp[root][0],dp[root][1]).

**:

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn=

6010

;struct point

tree[maxn]

;bool root[maxn]

;int dp[maxn][2

];int ans;

voi***(

int i)

}int

main()

for(

int i=

1;i<=n;i++

) cin>>tree[i]

.w;for

(int i=

1;i<=n;i++

)//初始化

for(

int i=

1;i)int rot;

for(

int i=

1;i<=n;i++)pp

(rot)

; ans=

max(dp[rot][0

],dp[rot][1

]); cout<}}

Week13 作業 必做

a tt 的神秘任務1 這一天,tt 遇到了乙個神秘人。神秘人給了兩個數字,分別表示 n 和 k,並要求 tt 給出 k 個奇偶性相同的正整數,使得其和等於 n。例如 n 10,k 3,答案可以為 4 2 4 tt 覺得這個任務太簡單了,不願意做,你能幫他完成嗎?本題是spj input 第一行乙個...

Week13作業 C TT的獎勵 dp

在大家不辭辛勞的幫助下,tt 順利地完成了所有的神秘任務。神秘人很高興,決定給 tt 乙個獎勵,即白日做夢之撿貓咪遊戲。撿貓咪遊戲是這樣的,貓咪從天上往下掉,且只會掉在 0,10 範圍內的整數。tt 初始站在位置五上,且每秒只能在移動不超過一公尺的範圍內接住掉落的貓咪,如果沒有接住,貓咪就會跑掉。例...

week13作業B TT的神秘任務2

題目 在你們的幫助下,tt 輕鬆地完成了上乙個神秘任務。但是令人沒有想到的是,幾天後,tt 再次遇到了那個神秘人。而這一次,神秘人決定加大難度,並許諾 tt,如果能夠完成便給他乙個獎勵。任務依舊只給了兩個數字,分別表示 n 和 k,不過這一次是要求 tt 給出無法被 n 整除的第 k 大 的正整數。...