題目傳送門
這道題可以用多叉樹轉二叉樹的方法,左子樹為兒子,右子樹為同個父親的兄弟,這樣的話就可以很方便地寫出狀態轉移方程:
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#includecodevs1378#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 選課 樹形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門課並考核通過就能獲得相應的學分。在選修課程中,有些課程可以直接選修,有...