題目大意
在大學裡每個學生,為了達到一定的學分,必須從很多課程裡選擇一些課程來學習,在課程裡有些課程必須在某些課程之前學習,如高等數學總是在其它課程之前學習。現在有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現在這顆樹枝條太多了,需要剪...