問題描述
n個人參加某項特殊考試。
為了公平,要求任何兩個認識的人不能分在同乙個考場。
求是少需要分幾個考場才能滿足條件。
輸入格式
第一行,乙個整數n(1#include#include#includeusing namespace std;
const int maxn=105;
const int inf=0x3f3f3f3f;
int n,m;
int a[maxn][maxn],room[maxn];//記錄每個房間的人數
int no[maxn][maxn];//記錄第i個房間的第j個人的編號
int ans=inf;//記錄最小的房間數
void dfs(int num,int x) //判斷第x個人,當前已經用了num個房間
for(int i=1;i<=num;i++) //遍歷每個房間
if(count==sum) //如果和每個人都不認識
} no[num+1][++room[num+1]]=x;//新開乙個房間
dfs(num+1,x+1);
--room[num+1];
}int main()
dfs(0,1);
cout<}
藍橋杯分考場
因為資料量很小可以使用回溯演算法。應用兩層回溯 第一層回溯是將考生放在不同考場裡面產生的效果,比如學生3號可以放在教室1和教室2中那麼放在那乙個教室會產生更好的效果這是一層回溯。第二層回溯是考生放入以前的考場還是考生自己重新用乙個考場。比如考生3號可以放進教室1和教室2,也可以放進教室3。應用簡單的...
藍橋杯 分考場
規模n 100,可以用回溯暴力解決,簡單剪枝把大於最優房間的狀態全部剪掉。大體思路,每給乙個人安置考場的時候,把當前安排出去的所有考場都試一遍,如果某考場沒有熟人,遞迴。直到把所有安排過的考場試一遍以後,再把他安排到乙個新的考場,遞迴,當p n時,直接記錄當前解是否少於當前最優解 貼 include...
藍橋杯 分考場
問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1 有問題,但是不知道錯在 思路感覺沒有問題 後面發現了再改 include include include using namespace std i...