lanqiao OJ 109 分考场

简介: lanqiao OJ 109 分考场

1.分考场 - 蓝桥云课 (lanqiao.cn)

dfs搜索

剪枝:num是以前排教室出的所有安排的最少教室,如果我们这一次的排的教室已经多于现在的num了,就直接return就行了

a[i][j] 用此数组来记录两者之间认不认识

v[i][j] 表示第i个教室的第j个座位坐着的人

#include<iostream>
#include<cstring>
#include<algorithm>
 
using namespace std ;
const int N = 110;
int a[N][N] ;
int v[N][N] ; //v表示第i个教室的第j个座位
int n , m ; 
int num = N ;//表示当前的最优教室安排
void dfs(int x,int room){
  if(room >= num ) return ;//比以前的最好情况差,直接返回
  if(x > n ){
    num = min(num , room) ;//其实这里直接num = room 就行  因为前面比sum大的已经返回了
    return ;
  } 
  int k = 1 ;//遍历教师的每一个座位
  for(int j = 1 ; j <= room ; j ++){
    k=1;
    while(v[j][k] && !a[x][v[j][k]]) k ++ ;//往后找 如果中间碰到了一个认识的人k就停止+1
    if(!v[j][k]){                          //如果找完遍历教室的人没有认识的就刚好把它安排在这个教室的k个座位
      v[j][k] = x ;
      dfs(x+1,room);
      v[j][k] = 0 ;
    }
  }
//所有的教室都有认识的,只能给这个人单独开一个教室
  v[room+1][1] =x ;
  dfs(x+1,room+1) ;
  v[room+1][1] = 0 ;
}
 
 
int main(){
  cin >> n >> m ;
  for(int i = 1 ; i <= m ; i ++){
    int x,y ; cin >> x >> y ;
    a[x][y] = a[y][x] = 1 ;
  }
  dfs(1,1);
  cout << num << endl ;
  return 0 ;
}
目录
相关文章
|
4月前
lanqiao OJ 99 分巧克力
lanqiao OJ 99 分巧克力
24 1
|
4月前
lanqiao OJ 1024 游园安排
lanqiao OJ 1024 游园安排
27 3
|
4月前
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
25 2
|
4月前
lanqiao OJ 2143 最少刷题数
lanqiao OJ 2143 最少刷题数
25 0
|
9月前
|
C++
第十三届蓝桥杯B组C++(试题B:顺子日期)
第十三届蓝桥杯B组C++(试题B:顺子日期)
103 0
|
存储 人工智能 BI
P8597 [蓝桥杯 2013 省 B] 翻硬币个人思考总结+第五届传智杯ABC 初赛题解
桌上放着排成一排的若干硬币。我们用 `*` 表示正面,用 `o` 表示反面(是小写字母,不是零),比如可能情形是 `**oo***oooo`,如果同时翻转左边的两个硬币,则变为 `oooo***oooo`。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
193 0
|
4月前
lanqiao OJ 22年省赛 扫雷
lanqiao OJ 22年省赛 扫雷
42 1
|
4月前
lanqiao OJ 98 包子凑数
lanqiao OJ 98 包子凑数
18 0
|
机器学习/深度学习 算法
【第十五届蓝桥杯备赛(bushi,写文凑个数)】蓝桥OJ---长草
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 BFS Flood Fill算法
204 0
|
4月前
lanqiao OJ 525 传球游戏
lanqiao OJ 525 传球游戏
36 2

热门文章

最新文章