codevs1378 選課 樹形動規

2022-05-20 08:27:26 字數 684 閱讀 5506

題目傳送門

這道題可以用多叉樹轉二叉樹的方法,左子樹為兒子,右子樹為同個父親的兄弟,這樣的話就可以很方便地寫出狀態轉移方程:

f[x][v]=max(f[x][v],w[x]+dp(ch[x][0],i)+dp(ch[x][1],v-i-1));

要注意的是,f[x][v]可能在之前已經計算過(比如f[ch[i][0]][4]在f[i][5,6,7...]的時候就已經計算過)因此不必再計算,否則會tle。

剩下的就不難了,直接dfs即可,具體實現細節看**:

#include#include

#include

#include

using

namespace

std;

int n,m,ch[305][2],w[305],fa,f[305][305

]; int

read()

while(c>='

0'&&c<='9')

return ans*f;

}int dp(int x,int

v)int

main()

int ans=dp(ch[0][0

],m);

printf("%d

",ans);

return0;

}

codevs1378

codevs1378 選課 樹形DP

學校實行學分制。每門的必修課都有固定的學分,同時還必須獲得相應的選修課程學分。學校開設了n n 300 門的選修課程,每個學生可選課程的數量m是給定的。學生選修了這m門課並考核通過就能獲得相應的學分。在選修課程中,有些課程可以直接選修,有些課程需要一定的基礎知識,必須在選了其它的一些課程的基礎上才能...

code vs 1378 選課(樹形DP)

時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題解 檢視執行結果 學校實行學分制。每門的必修課都有固定的學分,同時還必須獲得相應的選修課程學分。學校開設了n n 300 門的選修課程,每個學生可選課程的數量m是給定的。學生選修了這m門課並考核通過就能獲得相應的學分。...

codevs1378 選課 樹形dp

codevs1378 選課 題目描述 description 學校實行學分制。每門的必修課都有固定的學分,同時還必須獲得相應的選修課程學分。學校開設了n n 300 門的選修課程,每個學生可選課程的數量m是給定的。學生選修了這m門課並考核通過就能獲得相應的學分。在選修課程中,有些課程可以直接選修,有...