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 ;
}
相关文章
蓝桥杯:2021省赛 例题:时间显示
蓝桥杯:2021省赛 例题:时间显示
57 0
lanqiao OJ 1024 游园安排
lanqiao OJ 1024 游园安排
lanqiao OJ 99 分巧克力
lanqiao OJ 99 分巧克力
lanqiao OJ 1505 剪邮票
lanqiao OJ 1505 剪邮票
|
4月前
|
Java
P9242 [蓝桥杯 2023 省 B] 接龙数列JAVA,边权为1的最短路问题,洛谷P9242 [蓝桥杯 2023 省 B] 接龙数列​编辑力扣1926.迷宫离入口最近的出口力扣433.
P9242 [蓝桥杯 2023 省 B] 接龙数列JAVA,边权为1的最短路问题,洛谷P9242 [蓝桥杯 2023 省 B] 接龙数列​编辑力扣1926.迷宫离入口最近的出口力扣433.
|
5月前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
|
5月前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
|
5月前
蓝桥备战--分糖果OJ2928 贪心 分类讨论
蓝桥备战--分糖果OJ2928 贪心 分类讨论
60 0
|
5月前
|
C++
第十三届蓝桥杯B组C++(试题B:顺子日期)
第十三届蓝桥杯B组C++(试题B:顺子日期)
78 0
[算法刷题题解笔记] 洛谷 P1003 [NOIP2011 提高组] 铺地毯 [枚举]
[算法刷题题解笔记] 洛谷 P1003 [NOIP2011 提高组] 铺地毯 [枚举]