選課啊,好厲害的一道題,記得當年是瑣大神給我講的呢。
樹形揹包(廢話)。
並不想再抄題幹······
用dfs式的樹形dp更新,能過的原因是這題資料範圍是在是太小了。只有500;
如果說要注意的地方的話,就是dfs裡的迴圈是逆序的,
原因同揹包,從子樹j中,不可能重複選。
(其實dp[i][k]是省去了一維的即從i的前j棵子樹中選k門)。
#include#include#include#include#include#includeusing namespace std;
int dp[500][500];
int a[500];
int fa[500];
struct edge;
edge e[100000+666];
int h[500];
int p;
inline void add(int a,int b)
int n,m;
inline int ra()
while(ch>='0'&&ch<='9')
return x*flag;
}void dfs(int now)
{ dp[now][1]=a[now];
for(int i=h[now];i;i=e[i].next)
{ dfs(e[i].to);
for(int j=m+1;j>=1;j--)
for(int k=1;k
題解 Luogu p2014 選課 樹型dp
在大學裡每個學生,為了達到一定的學分,必須從很多課程裡選擇一些課程來學習,在課程裡有些課程必須在某些課程之前學習,如高等數學總是在其它課程之前學習。現在有n門功課,每門課有個學分,每門課有一門或沒有直接先修課 若課程a是課程b的先修課即只有學完了課程a,才能學習課程b 乙個學生要從這些課程裡選擇m門...
P2014 選課(樹形揹包)
在大學裡每個學生,為了達到一定的學分,必須從很多課程裡選擇一些課程來學習,在課程裡有些課程必須在某些課程之前學習,如高等數學總是在其它課程之前學習。現在有n門功課,每門課有個學分,每門課有一門或沒有直接先修課 若課程a是課程b的先修課即只有學完了課程a,才能學習課程b 乙個學生要從這些課程裡選擇m門...
洛谷2014 選課(樹形DP 樹形揹包問題
在大學裡每個學生,為了達到一定的學分,必須從很多課程裡選擇一些課程來學習,在課程裡有些課程必須在某些課程之前學習,如高等數學總是在其它課程之前學習。現在有n門功課,每門課有個學分,每門課有一門或沒有直接先修課 若課程a是課程b的先修課即只有學完了課程a,才能學習課程b 乙個學生要從這些課程裡選擇m門...