«問題描述:
假設乙個試題庫中有n道試題。每道試題都標明了所屬類別。同一道題可能有多個類別屬性。現要從題庫中抽取m 道題組成試卷。並要求試卷包含指定型別的試題。試設計乙個滿足要求的組卷演算法。
«程式設計任務:
對於給定的組卷要求,計算滿足要求的組卷方案。
«資料輸入:
由檔案testlib.in提供輸入資料。檔案第1行有2個正整數k和n (2 <=k<= 20, k<=n<= 1000)k 表示題庫中試題型別總數,n 表示題庫中試題總數。第2 行有k 個正整數,第i 個正整數表示要選出的型別i 的題數。這k個數相加就是要選出的總題數m。接下來的n行給出了題庫中每個試題的型別資訊。每行的第1 個正整數p表明該題可以屬於p類,接著的p個數是該題所屬的型別號。
«結果輸出:
程式執行結束時,將組卷方案輸出到檔案testlib.out 中。檔案第i 行輸出 「i:」後接型別i的題號。如果有多個滿足要求的方案,只要輸出1 個方案。如果問題無解,則輸出「nosolution!」。
輸入檔案示例
testlib.in
3 15
3 3 4
2 1 2
1 31 3
1 31 3
3 1 2 3
2 2 3
2 1 3
1 21 2
2 1 2
2 1 3
2 1 2
1 13 1 2 3
輸出檔案示例
testlib.out
1: 1 6 8
2: 7 9 10
3: 2 3 4 5
網路流 最大流
如果最大流等於m,那麼有解,遍歷從題型到題號的所有邊,記錄答案即可
1/*by silvern
*/2 #include3 #include4 #include5 #include6 #include7 #include8 #include9
using
namespace
std;
10const
int inf=1e9;
11const
int mxn=1050;12
intread()
15while(ch>='
0' && ch<='9')
16return x*f;17}
18struct
edgee[mxn*80
];21
int hd[mxn],mct=1;22
void add_edge(int u,int v,int
f)27
void insert(int u,int v,int
f)30
intn,k,s,t;
31int
d[mxn];
32bool
bfs()45}
46}47return
d[t];48}
49int dfs(int u,int
lim)62}
63 d[u]=0;64
return
f;65}66
intdinic()
71 vectorq[mxn];
72void
print()79}
80for(i=1;i<=k;i++)
85 printf("\n"
);86}87
return;88
}89int m=0;90
intmain()
102for(i=1;i<=n;i++)
108}
109for(i=1;i<=n;i++)insert(i+k,t,inf);
110int ans=dinic();
111if(ans==m)print();
112else printf("
nosolution!\n");
113return0;
114 }
cogs 732 網路流24題 試題庫
網路流24題 試題庫 輸入檔案 testlib.in 輸出檔案 testlib.out 評測外掛程式 時間限制 1 s 記憶體限制 128 mb 問題描述 假設乙個試題庫中有n道試題。每道試題都標明了所屬類別。同一道題可能有多個類別屬性。現要從題庫中抽取m 道題組成試卷。並要求試卷包含指定型別的試題...
COGS461 網路流24題 餐巾
問題描述 乙個餐廳在相繼的n天裡,第i天需要ri塊餐巾 i l,2,n 餐廳可以從三種途徑獲得餐巾。1 購買新的餐巾,每塊需p分 2 把用過的餐巾送到快洗部,洗一塊需m天,費用需f分 f 3 把餐巾送到慢洗部,洗一塊需n天 n m 費用需s分 s在每天結束時,餐廳必須決定多少塊用過的餐巾送到快洗部,...
Cogs 729 網路流24題 圓桌聚餐
網路流24題 圓桌聚餐 輸入檔案 roundtable.in 輸出檔案 roundtable.out 評測外掛程式 時間限制 1 s 記憶體限制 128 mb 問題描述 假設有來自m 個不同單位的代表參加一次國際會議。每個單位的代表數分別為 ri i 1,2,3 m 會議餐廳共有n張餐桌,每張餐桌可...