問題描述
n個人參加某項特殊考試。
為了公平,要求任何兩個認識的人不能分在同乙個考場。
求是少需要分幾個考場才能滿足條件。
輸入格式
第一行,乙個整數n(1
第二行,乙個整數m,表示接下來有m行資料
以下m行每行的格式為:兩個整數a,b,用空格分開 (1<=a,b<=n) 表示第a個人與第b個人認識。
輸出格式
一行乙個整數,表示最少分幾個考場。
樣例輸入58
1 21 3
1 42 3
2 42 5
3 44 5
樣例輸出
4樣例輸入510
1 21 3
1 41 5
2 32 4
2 53 4
3 54 5
樣例輸出
5題目分析:
模擬分考場的過程,搜尋每一種可能就可以,要在合適的地方剪枝!!
剪枝少了乙個等號,直接導致有一組資料超時。
大規模的資料,不要用vector,直接 多花記憶體模擬乙個動態陣列即可。
#include #include#include
#include
using
namespace
std;
int m[105][105
];int n;//
學生人數
int t_t;//
認識的關係數
intset[105][105];//
記錄每個班級的人
int len[105];//
記錄每個班級的長度
int sum = 0;//
記錄最小班級數
void dfs(int t, int
tt)
inti;
for(i=1;i<=n;i++)
}if(flag)
}if(i != n + 1)}
intmain()
dfs(
1, 0
); cout
}
還需磨練內功啊!爭取做到任何時候穩如老狗。
歷屆試題 分考場
問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1一開始以為是簡單的貪心問題,可不想一直正確率40 最後發現還是需要採用回溯,在剪枝下深度遍歷所有情況.include int pre 100 100 ...
歷屆試題 分考場
問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1輸出格式 一行乙個整數,表示最少分幾個考場。樣例輸入58 1 21 3 1 42 3 2 42 5 3 44 5 樣例輸出 樣例輸入510 1 21 ...
試題 歷屆試題 分考場
看的n不大,就100,我們想到直接暴力做,當然,最好還是剪枝一下,我這裡用了順序列舉,排序剪枝,中間判斷一下當前的考場數量比當前的ans是否大,如果大於等於了,就不用列舉,所以就兩次剪枝,我就過了 include include include include using namespace std...