問題描述
n個人參加某項特殊考試。
為了公平,要求任何兩個認識的人不能分在同乙個考場。
求是少需要分幾個考場才能滿足條件。
輸入格式
第一行,乙個整數n(1輸出格式
一行乙個整數,表示最少分幾個考場。
樣例輸入 5
81 2
1 31 4
2 32 4
2 53 4
4 5樣例輸出 4
樣例輸入 5
101 2
1 31 4
1 52 3
2 42 5
3 43 5
4 5樣例輸出 5
正解
#include#define endl '\n'
using namespace std;
const int n = 1e2+5;
typedef long long ll;
int vec[n][n]; //存放朋友,值為一是朋友
int set[n][n]; //存放教室裡的人
int setcnt[n]; //教室裡的人數
int n,m,a,b;
int res = 100;
void solve(int k,int q)
if(k>n)
for(int i=1;i<=q;i++)
}if(knowflag==0)
}//重新開乙個房間
set[q+1][ ++setcnt[q+1] ] = k; //將這個學生存到這個考場中
solve(k+1,q+1);
setcnt[q+1]--;
} int main()
solve(1,1);
cout《用stl的vector和set超時了,比賽的時候看不到結果,還是能手寫盡量手寫吧(80分**)
#include#define endl '\n'
using namespace std;
const int n = 1e2+5;
typedef long long ll;
vectorvec[n];
setset[n];
int n,m,a,b;
int res = 100;
void solve(int k,int q)
if(k>n)
int sz=vec[k].size();//看看他熟悉的人在不在i房間
for(int i=1;i<=q;i++)
solve(1,1);
cout
}
回溯 分考場
問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1輸出格式 一行乙個整數,表示最少分幾個考場。樣例輸入58 1 21 3 1 42 3 2 42 5 3 44 5 樣例輸出 4樣例輸入510 1 21...
藍橋杯 分考場(回溯)
問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1輸出格式 一行乙個整數,表示最少分幾個考場。樣例輸入58 1 21 3 1 42 3 2 42 5 3 44 5 樣例輸出 樣例輸入510 1 21 ...
歷屆試題 分考場 dfs 回溯
藍橋 分考場 題意及思路 就是為了防作弊,考場不能有互相認識的人,所以認識的都要分開 殘忍了點 題目資料量比較小,就是能不能進這個考場的問題,所以dfs跑一跑應該沒有太大的問題。t t!問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條...