回溯 分考場

2022-07-12 12:54:15 字數 1682 閱讀 4305

問題描述

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

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

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

輸入格式

第一行,乙個整數n(1輸出格式

一行乙個整數,表示最少分幾個考場。

樣例輸入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正解

#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]; //

教室裡的人數

intn,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

return0;

}

用stl的vector和set超時了,比賽的時候看不到結果,還是能手寫盡量手寫吧(80分**)

#include#define endl '\n'

using

namespace

std;

const

int n = 1e2+5

;typedef

long

long

ll;vector

vec[n];

setset[n];

intn,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++)

}if(knowflag==0)

}//重新開乙個房間

set[q+1].insert(k); //

將這個學生存到這個考場中

solve(k+1,q+1

); set[q+1

].erase(k);

} int

main()

solve(

1,1);

cout

return0;

}

回溯 分考場

問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1輸出格式 一行乙個整數,表示最少分幾個考場。樣例輸入 5 81 2 1 31 4 2 32 4 2 53 4 4 5樣例輸出 4 樣例輸入 5 101...

藍橋杯 分考場(回溯)

問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1輸出格式 一行乙個整數,表示最少分幾個考場。樣例輸入58 1 21 3 1 42 3 2 42 5 3 44 5 樣例輸出 樣例輸入510 1 21 ...

歷屆試題 分考場 dfs 回溯

藍橋 分考場 題意及思路 就是為了防作弊,考場不能有互相認識的人,所以認識的都要分開 殘忍了點 題目資料量比較小,就是能不能進這個考場的問題,所以dfs跑一跑應該沒有太大的問題。t t!問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條...