Vijos 題庫 選課 P1180

2021-08-08 21:41:02 字數 1444 閱讀 5727

描述

學校實行學分制。每門的必修課都有固定的學分,同時還必須獲得相應的選修課程學分。學校開設了n(n<300)門的選修課程,每個學生可選課程的數量m是給定的。學生選修了這m門課並考核通過就能獲得相應的學分。

在選修課程中,有些課程可以直接選修,有些課程需要一定的基礎知識,必須在選了其它的一些課程的基礎上才能選修。例如《frontpage》必須在選修了《windows操作基礎》之後才能選修。我們稱《windows操作基礎》是《frontpage》的先修課。每門課的直接先修課最多只有一門。兩門課也可能存在相同的先修課。每門課都有乙個課號,依次為1,2,3,…。 例如:

表中1是2的先修課,2是3、4的先修課。如果要選3,那麼1和2都一定已被選修過。   你的任務是為自己確定乙個選課方案,使得你能得到的學分最多,並且必須滿足先修課優先的原則。假定課程之間不存在時間上的衝突。

格式輸入格式

輸入檔案的第一行包括兩個整數n、m(中間用乙個空格隔開)其中1≤n≤300,1≤m≤n。

以下n行每行代表一門課。課號依次為1,2,…,n。每行有兩個數(用乙個空格隔開),第乙個數為這門課先修課的課號(若不存在先修課則該項為0),第二個數為這門課的學分。學分是不超過10的正整數。

輸出格式

輸出檔案每行只有乙個數。第一行是實際所選課程的學分總數。

樣例1樣例輸入

5 4

0 1

1 1

2 3

0 3

2 4copy

樣例輸出

copy

樣例2樣例輸入

7 4

2 2

0 1

0 4

2 1

7 1

7 6

2 2

copy

樣例輸出

copy

限制提示

huyichen

#include 

#include

#include

#include

#include

#include

#define modd 198964

using

namespace

std;

int n,m;

int f[350][350];

int fa[350];

int val[350];

int root[350];

vector

g[1005];

void dfs(int u,int num)

}}int main()

for(int i=1;i<=n;i++) f[0][i]=0;

dfs(0,m);

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

return

0;}

樹形dp~陣列開小的我調了7遍。。。

(p 1 和 ( p 1)的區別

內容會持續更新,有錯誤的地方歡迎指正,謝謝 例1 下面程式的輸出結果是 include void main int p 3 p n cout 0 0 p 0 1 p 2 解析 p是乙個指標,乙個指向長度為3的陣列的指標。直接在p上偏移就是行,在 p上偏移就是列。比如 p 1 等價於p 1 0 等於4...

編譯原理P1

1.高階語言 過程式語言 fortran pascal c 函式式語言 lisp 邏輯式語言 prolog 物件式語言 c 2.低階語言 面向機器的語言 組合語言 機器語言 翻譯 是指在計算機中放置乙個能由計算機直接執行的翻譯程式,它以某一種程式語言 源語言 所編寫的程式 源程式 作為翻譯或加工的物...

Flask WTF 入門使用P1

flask wtf為您的flask應用程式整合了wtforms,具體例子如下 from flask wtf import flaskform from wtforms import stringfield from wtforms.validators import datarequired cla...