藍橋杯 分考場

2021-09-12 20:19:51 字數 919 閱讀 8414

問題描述

n個人參加某項特殊考試。

為了公平,要求任何兩個認識的人不能分在同乙個考場。

求是少需要分幾個考場才能滿足條件。

輸入格式

第一行,乙個整數n(1**有問題,但是不知道錯在** 思路感覺沒有問題 後面發現了再改

#include

#include

#include

using namespace std;

int n,m;

const

int maxn =

110;

int gro[maxn]

[maxn]

;int class_num[maxn]

;//用來記錄每個教室的人數

int room[maxn]

[maxn]

;//記錄房間號對應的座位坐著的同學的編號

int ans =

9999999

;void

dfs(

int id ,

int num)

for(

int i=

1;i<=num;i++)}

if(count==peo)

} room[num+1]

[++class_num[num+1]

]= id;

//說明上面每個教室都有人認識,必須重新開闢乙個教室

dfs(id+

1,num+1)

;// --class_num[num+1];

}int

main()

dfs(1,

0);//初始狀態 分配1號,此時0零房間

cout

}

藍橋杯分考場

因為資料量很小可以使用回溯演算法。應用兩層回溯 第一層回溯是將考生放在不同考場裡面產生的效果,比如學生3號可以放在教室1和教室2中那麼放在那乙個教室會產生更好的效果這是一層回溯。第二層回溯是考生放入以前的考場還是考生自己重新用乙個考場。比如考生3號可以放進教室1和教室2,也可以放進教室3。應用簡單的...

藍橋杯 分考場

規模n 100,可以用回溯暴力解決,簡單剪枝把大於最優房間的狀態全部剪掉。大體思路,每給乙個人安置考場的時候,把當前安排出去的所有考場都試一遍,如果某考場沒有熟人,遞迴。直到把所有安排過的考場試一遍以後,再把他安排到乙個新的考場,遞迴,當p n時,直接記錄當前解是否少於當前最優解 貼 include...

藍橋杯 分考場

問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1 include include includeusing namespace std const int maxn 105 const int in...