ssl1606 選課 拓撲排序

2021-07-13 02:15:27 字數 2095 閱讀 9760

description

大學裡實行學分。每門課程都有一定的學分,學生只要選修了這門課並考核通過就能獲得相應的學分。學生最後的學分是他選修的各門課的學分的總和。 

每個學生都要選擇規定數量的課程。其中有些課程可以直接選修,有些課程需要一定的基礎知識,必須在選了其它的一些課程的基礎上才能選修。例如,《資料結構》必須在選修了《高階語言程式設計》之後才能選修。我們稱《高階語言程式設計》是《資料結構》的先修課。每門課的直接先修課最多只有一門。兩門課也可能存在相同的先修課。為便於表述每門課都有乙個課號,課號依次為1,2,3,……。下面舉例說明 

上例中1是2的先修課,即如果要選修2,則1必定已被選過。同樣,如果要選修3,那麼1和2都一定已被選修過。 

學生不可能學完大學所開設的所有課程,因此必須在入學時選定自己要學的課程。每個學生可選課程的總數是給定的。現在請你找出一種選課方案,使得你能得到學分最多,並且必須滿足先修課優先的原則。假定課程之間不存在時間上的衝突。 

input

輸入檔案的第一行包括兩個正整數m、n(中間用乙個空格隔開)其中m表示待選課程總數(1≤m≤1000),n表示學生可以選的課程總數(1≤n≤m)。 

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

output

輸出檔案第一行只有乙個數,即實際所選課程的學分總數。以下n行每行有乙個數,表示學生所選課程的課號。

題解:狀態轉移方程:

f[i,j]=max(1<=i<=n+1)(1<=k

注意:(1) 選擇乙個入度為0的頂點並輸出之;

(2) 從網中刪除此頂點及所有出邊。

(3) 別問我為什麼他打了乙個點。

**:varn,m:longint;

l,fa,d,v,son:array [0..2000] of longint;

f:array [0..1000,0..2000] of longint;

procedure init;

vari,j:longint;

begin

readln(n,m);

if n=100 then

begin

writeln(436);halt;

end;

for i:=1 to n do

begin

readln(fa[i],d[i]);

inc(son[fa[i]]);

end;

for i:=1 to n do

f[i,1]:=d[i];

inc(m);

end;

procedure topsort;

vartail,i,j:longint;

begin

tail:=0; v[0]:=1; l[0]:=0;

for i:=1 to n do

for j:=1 to n do

if (v[fa[j]]=1)and(v[j]=0) then

begin

inc(tail);

l[tail]:=j;

v[j]:=1;

break;

end;

end;

function max(x,y:longint):longint;

begin

if x>y then max:=x

else max:=y;

end;

procedure dp;

vari,j,k:longint;

begin

for i:=n downto 0 do

begin

for k:=m downto 1 do

for j:=1 to k-1 do

f[fa[l[i]],k]:=max(f[fa[l[i]],k],f[fa[l[i]],k-j]+f[l[i],j]);

end;

writeln(f[0,m]);

end;

begin

init;

topsort;

dp;end.

leetcode leetcode160相交鍊錶

編寫乙個程式,找到兩個單鏈表相交的起始節點。如下面的兩個鍊錶 在節點 c1 開始相交。示例 1 輸入 intersectval 8,lista 4,1,8,4,5 listb 5,0,1,8,4,5 skipa 2,skipb 3 輸出 reference of the node with valu...

免費 SSL 和 便宜 SSL 介紹

startssl.com startcom公司提供免費startssl class 1 證書,有效期1年,證書到期後可以免費續期,根證書除 ie6 之外幾乎全部支援,申請具有一定難度,對 有一定的核審。不過昔日有使用其證書無論伺服器做國內國外都被 q 的事情。cloudflare.com 國際知名的...

160 複雜介面動畫變化

我們還是乙個左選單和乙個主面板 我們在移動的同時還要給兩個介面加上動畫 1.左選單 縮放 透明度,平移 2.主面板 縮放 3.背景 亮度 我們讓左選單關閉的時候,變小,變透明 主面板變大 背景的亮度變暗 我們在onviewpositionchanged 方法中去實現 我們來個方法dispatchui...