資料結構與演算法實驗題 9 1 K 歌 DFS 剪枝

2021-06-19 03:39:45 字數 1035 閱讀 2258

資料結構與演算法實驗題 k 歌

★實驗任務

3* n 個人(標號1~ 3 * n )分成 n 組 k 歌。有 m 個 3 人組合,每個組合都對應乙個分數,你能算出最大能夠得到的總分數麼?

★資料輸入

輸入的第 1 行是乙個正整數 n 和 m(1<= n <=6 ,  n<=m<= c(3*n,3) 組合數) ,輸入的第2~m+1行每行包括四個正整數a,b,c,s(1<=a , b ,c <=3 *n, a,b,c不相等,1<=s<=10 ^8)表示組合(a,b,c)可以獲得分數 s。

★資料輸出

輸出可以獲得的最大分數。(題目保證有一組解。)

輸入示例

3 31 2 3 1

4 5 6 2

7 8 9 3

★輸出示例

給出另外一組資料

3 51 2 3 2

4 5 6 5

1 4 5 3

2 3 6 7

7 8 9 1

輸出11

dfs+剪枝

用dfs進行遍歷,然後如果不進行剪枝的話,當c(18,3)=816 種情況全部出來時,時間複雜度將高達 816^6。

那麼如何進行剪枝?

取其中所有s中的最大值,最好情況下是dfs中該葉節點之後的所有都取到這個最大值,如果這個最好的情況都小於等於答案,那麼此路顯然不可能是最優解。

詳見**吧。。。。

#includeconst int maxn=1024;

int n,m;

bool exist[19]=;

int ans=0;

int maxs=0;

struct combination

data[maxn];

inline void setexist(bool a,int i)

void dfs(int cur,int now_c,int sum)

{ if(((n-now_c)*maxs+sum)<=ans) //剪枝

return;

if(now_c==n)

{ if(ans

演算法與資料結構實驗題1 9

實驗任務 上回說到,你奔走於各個世界線拯救靜靜。現在,完成任務的你決定玩個簡單的遊戲靜一靜。我們知道,數字在計算機裡是用二進位制儲存的,現在你想知道如果把乙個數字的二進位制倒過來是多少。比如 int a 5,用二進位制表示就是00000000000000000000000000000101。把它倒過...

演算法與資料結構實驗題 3 1 火車

實驗任務 tonyy 等火車無聊的時候,會去觀察火車的排列,有一天他思考這麼乙個問 題,火車總站的火車只能進站,要出站的話只能先出最後進站的那輛車,那麼知 道火車的進站順序,能不能把它的出站順序調整成火車站想要的呢?資料輸入 輸入第一行為乙個正整數 n 表示火車輛數 編號 1 n 1 n 9 然後為...

資料結構與演算法實驗祝恩 《資料結構與演算法》實驗報告

保持青春的秘訣,是有一顆不安分的心。資料結構與演算法 實驗報告 模板 實驗題目 線性表綜合實驗 班級 姓名 學號 完成日期 一 實驗目的 熟悉線性表的基本操作在兩種儲存結構上的實現,其中以熟悉各種鍊錶的操作為重點。通過具體應用例項在複習高階程式語言使用方法的基礎上初步了解資料結構的應用。二 實驗內容...