Nowcoder51179 選課(樹形揹包)

2022-09-02 09:33:10 字數 954 閱讀 8728

學校實行學分制。

每門的必修課都有固定的學分,同時還必須獲得相應的選修課程學分。

學校開設了 n 門的選修課程,每個學生可選課程的數量 m 是給定的。

學生選修了這 m 門課並考核通過就能獲得相應的學分。

在選修課程中,有些課程可以直接選修,有些課程需要一定的基礎知識,必須在選了其他的一些課程的基礎上才能選修。

例如《windows程式設計》必須在選修了《windows操作基礎》之後才能選修。

我們稱《windows操作基礎》是《windows程式設計》的先修課。

每門課的直接先修課最多只有一門。

兩門課可能存在相同的先修課。

你的任務是為自己確定乙個選課方案,使得你能得到的學分最多,並且必須滿足先修條件。

假定課程之間不存在時間上的衝突。

注意滾動陣列轉移時的細節。

//f(i,j)表示在節點i的子樹內選擇j個節點所能得到的最大學分

#includeusing namespace std;

const int maxn=1010;

typedef long long ll;

ll f[maxn][maxn][2];

int e[maxn];

int a[maxn];

vectorg[maxn];

int n,m;

int rt=0;

int size[maxn];

void dfs (int x)

} size[x]+=size[y];

k^=1;

} e[x]=(k^1);

}int main ()

dfs(0);

//for (int i=1;i<=m;i++) printf("%d\n",f[0][i]);

printf("%lld\n",f[0][m][e[0]]);

}

(選課)揹包類樹形dp

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

luogu P2014 選課 樹形揹包

選課啊,好厲害的一道題,記得當年是瑣大神給我講的呢。樹形揹包 廢話 並不想再抄題幹 用dfs式的樹形dp更新,能過的原因是這題資料範圍是在是太小了。只有500 如果說要注意的地方的話,就是dfs裡的迴圈是逆序的,原因同揹包,從子樹j中,不可能重複選。其實dp i k 是省去了一維的即從i的前j棵子樹...

P2014 選課(樹形揹包)

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