問題描述
n個人參加某項特殊考試。
為了公平,要求任何兩個認識的人不能分在同乙個考場。
求是少需要分幾個考場才能滿足條件。
輸入格式
第一行,乙個整數n(1一開始以為是簡單的貪心問題,可不想一直正確率40%.
最後發現還是需要採用回溯,在剪枝下深度遍歷所有情況.
#include int pre[100][100]=,pre_num[100][100]=,min=100;
void join(int sum,int n,int m);
//遍歷所有可能進入的考場
for(j_1=0;j_1join(a,j_1,k);
//printf("%d-%d a試試%d加到%d中\n",num,min,k,j_1);
if(kdf(a,k+1,num);
else
}//printf("%d-%d b將%d取出到%d中\n",num,min,k,j_1);
for(i=0;i} }
//自己建立新考場
join(a,num,k);
num++;
//printf("%d-%d c試試%d加到%d中\n",num,min,k,num);
if(kdf(a,k+1,num);
else
} num--;
for(i=0;iint main()
df(a,0,0);
printf("%d\n",min);
return 0;
}
歷屆試題 分考場
問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1輸出格式 一行乙個整數,表示最少分幾個考場。樣例輸入58 1 21 3 1 42 3 2 42 5 3 44 5 樣例輸出 樣例輸入510 1 21 ...
歷屆試題 分考場
問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1 第二行,乙個整數m,表示接下來有m行資料 以下m行每行的格式為 兩個整數a,b,用空格分開 1 a,b n 表示第a個人與第b個人認識。輸出格式 一...
試題 歷屆試題 分考場
看的n不大,就100,我們想到直接暴力做,當然,最好還是剪枝一下,我這裡用了順序列舉,排序剪枝,中間判斷一下當前的考場數量比當前的ans是否大,如果大於等於了,就不用列舉,所以就兩次剪枝,我就過了 include include include include using namespace std...