選課 樹形動態規劃

2021-07-11 16:22:50 字數 900 閱讀 5766

題目大意

在大學裡每個學生,為了達到一定的學分,必須從很多課程裡選擇一些課程來學習,在課程裡有些課程必須在某些課程之前學習,如高等數學總是在其它課程之前學習。現在有n門功課,每門課有個學分,每門課有一門或沒有直接先修課(若課程a是課程b的先修課即只有學完了課程a,才能學習課程b)。乙個學生要從這些課程裡選擇m門課程學習,問他能獲得的最大學分是多少?分析

一.因為是多叉樹,所以要轉換成二叉樹。具體方法見:

二.轉完後就是乙個簡單的樹形dp

f[x,y]=max  0<=k<=y

三.因為是轉換後的二叉樹,所以列舉轉態時要注意改一改,具體見程式**

type

arr=record

l,r:longint;

end;

var a:array[0..1000] of arr;

ls,b:array[0..1000] of longint;

f:array[-1..1000,-1..1000] of longint;

i,j,k:longint;

n,m:longint;

procedure dfs(r,l:longint);

var i,j,k:longint;

begin

if r=-1 then exit;

if f[r,l]<>0 then exit;

if l=0

then

begin

f[r,l]:=0;

exit;

end;

if (a[r].l=-1) and (a[r].r=-1)

then begin

f[r,l]:=b[r];

exit;

end;

dfs(a[r].r,l);

if f[r,l]

動態規劃 選課(樹形)

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

選課 動態規劃

洛谷p2014 在大學裡每個學生,為了達到一定的學分,必須從很多課程裡選擇一些課程來學習,在課程裡有些課程必須在某些課程之前學習,如高等數學總是在其它課程之前學習。現在有n門功課,每門課有個學分,每門課有一門或沒有直接先修課 若課程a是課程b的先修課即只有學完了課程a,才能學習課程b 乙個學生要從這...

樹形動態規劃

description 有一棵蘋果樹,如果樹枝有分叉,一定是分2叉 就是說沒有只有1個兒子的結點 這棵樹共有n個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 2 5 3 4 1現在這顆樹枝條太多了,需要剪...