在大學裡每個學生,為了達到一定的學分,必須從很多課程裡選擇一些課程來學習,在課程裡有些課程必須在某些課程之前學習,如高等數學總是在其它課程之前學習。現在有n門功課,每門課有個學分,每門課有一門或沒有直接先修課(若課程a是課程b的先修課即只有學完了課程a,才能學習課程b)。乙個學生要從這些課程裡選擇m門課程學習,問他能獲得的最大學分是多少?
輸入格式:
第一行有兩個整數n,m用空格隔開。(1<=n<=300,1<=m<=300)
接下來的n行,第i+1行包含兩個整數ki和si, ki表示第i門課的直接先修課,si表示第i門課的學分。若ki=0表示沒有直接先修課(1<=ki<=n, 1<=si<=20)。
輸出格式:
只有一行,選m門課程的最大得分。
輸入樣例#1:
7 42 2
0 1
0 4
2 1
7 1
7 6
2 2
輸出樣例#1:
13f[i][j]表示i課程選j門所獲得的最大學分
1 #include 23#define min(a,b) (a4
#define max(a,b) (a>b?a:b)
5 inline void read(int &x)611
12const
int n(300+26
);13
inthead[n],sumedge;
14struct
edge
18 }edge[n*n];
19 inline void ins(int u,int v,int
w)20
2627
intn,m,f[n][n];
28int dfs(int u,int
fa)29
40return
sum;41}
4243
intpresist()
4452
53int aptal=presist();
54int main()
洛谷P2014 選課
題目描述 在大學裡每個學生,為了達到一定的學分,必須從很多課程裡選擇一些課程來學習,在課程裡有些課程必須在某些課程之前學習,如高等數學總是在其它課程之前學習。現在有n門功課,每門課有個學分,每門課有一門或沒有直接先修課 若課程a是課程b的先修課即只有學完了課程a,才能學習課程b 乙個學生要從這些課程...
洛谷P2014 選課
又是一道樹型dp,不過這次是以點帶權值,因為根是不確定的,我們可以設個虛根 0 因為算是多了一點,所以總點數應該 因為是點帶權值,所以不用dfs邊的數量了,不過有一點虛注意,因為多了乙個點,所以j層迴圈 所選的邊數 下界應該是到2的。include include using namespace s...
洛谷P2014 選課
題目描述 在大學裡每個學生,為了達到一定的學分,必須從很多課程裡選擇一些課程來學習,在課程裡有些課程必須在某些課程之前學習,如高等數學總是在其它課程之前學習。現在有n門功課,每門課有個學分,每門課有一門或沒有直接先修課 若課程a是課程b的先修課即只有學完了課程a,才能學習課程b 乙個學生要從這些課程...