luogu P2014 選課 樹形揹包

2021-08-09 17:15:20 字數 760 閱讀 4650

選課啊,好厲害的一道題,記得當年是瑣大神給我講的呢。

樹形揹包(廢話)。

並不想再抄題幹······

用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門...