首页 > 其他分享 >蓝桥练习题-分考场

蓝桥练习题-分考场

时间:2024-03-14 21:32:14浏览次数:23  
标签:练习题 room int 教室 dfs 蓝桥 考场 111 rel

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

思路:暴力dfs,dfs(x,room) x为待放入教室的人,room为当前最大有几号教室,对x依次遍历教室1到教室room,若某教室当前没该同学认识的人,直接放入,接着放下一个人,若room个教室里都存在x认识的人,即x不能放入任何教室,则在开辟一块新教室放入该同学,dfs结束标志,当n个同学全部安排好后,最小教室号即为所求答案;其中,若当前教室号超过原有最小号,直接返回;

C++代码:

#include <iostream>
using namespace std;
#define INF 0x3f3f3f3f;
typedef long long ll;
ll rel[111][111];//关系表,rel[a][b]=1表示a与b认识
ll Class[111][111];//教室里分配情况,Class[i][k]=x表示第i个教室的第k个位置被x坐了
int Mini=INF;
int n,m;

void dfs(int x,int room){
 
  if(room>=Mini)return;//若超过当前最优方案,则直接退出

  if(x>n){
    Mini=min(Mini,room);
    return;
  }

  for(int i=1;i<=room;i++){
    int k=1;
    while(Class[i][k]&&!rel[x][Class[i][k]])//找到当前坐在i教室的最后一个人
    k++;
    if(Class[i][k]==0){//若此位置没人,则x坐Class[i][k]
      Class[i][k]=x;
      dfs(x+1,room);
      Class[i][k]=0;//回溯
    }
  }

  //若当前的所有教室x均不能坐,开辟一个新教室
  Class[room+1][1]=x;
  dfs(x+1,room+1);
  Class[room+1][1]=0;//回溯
}


int main(){
  // 请在此输入您的代码
  cin>>n>>m;
  int x,y;
  for(int i=1;i<=m;i++){
    cin>>x>>y;
    rel[x][y]=1;
    rel[y][x]=1;
  }
  dfs(1,1);
  cout<<Mini;

  return 0;
}

希望对有需要的人能有所帮助,欢迎大家有什么问题到评论区里一起讨论!

标签:练习题,room,int,教室,dfs,蓝桥,考场,111,rel
From: https://blog.csdn.net/2301_81374681/article/details/136651115

相关文章

  • dp 练习题 2024.3.14
    ARC070ENarrowRectangles题意:平面上有\(n\)个矩形,左下角点坐标为\((l_i,i-1)\),右上角点坐标为\((r_i,i)\)。每次把一个矩形沿着横轴方向移动一个长度单位,求移动多少次使得任意两个相邻矩形存在交点。\(1\len\le10^5,\space1\lel_i<r_i\le10^9\)考虑最简单的dp,设\(......
  • 蓝桥杯练习系统—瓷砖铺放 dfs
    问题描述有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?例如,长度为4的地面一共有如下5种铺法:4=1+1+1+14=2+1+14=1+2+14=1+1+24=2+2编程用递归的方法......
  • 2024/3/11打卡管道(14届蓝桥杯省赛)——二分+区间合并
    目录题目思路代码题目有一根长度为 len的横向的管道,该管道按照单位长度分为 len 段,每一段的中央有一个可开关的阀门和一个检测水流的传感器。一开始管道是空的,位于 Li 的阀门会在  时刻打开,并不断让水流入管道。对于位于  的阀门,它流入的水在 时刻会使得......
  • 蓝桥杯Python国赛F题123(过70%代码)
    分析:明显考虑二分,(部分丑陋的笔记在下面,方便我自己看的,不喜勿喷)首先我们可以二分出包含在 [L,R]之间的完整的取值区间,[Get(a-1),Get(b)]因为左端点二分的是区间前端点,就是前端要包含在内,所以a-1然后就是对于两边突出部分进行计算,不知道为什么30%没有过,希望评论区......
  • 蓝桥杯算法训练VIP-数组查找及替换
    题目1634:蓝桥杯算法训练VIP-数组查找及替换时间限制:3s内存限制:192MB提交:1629解决:890题目描述给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间,替换为对应字母。输......
  • 备战蓝桥杯Day25 - 二叉搜索树查询和删除操作
    一、查询递归查询寻找的值比根节点大,遍历右子树;寻找的值比根节点小,遍历左子树。defqurey(self,node,val):ifnotnode:#没有节点,返回空returnNoneifnode.data<val:returnself.qurey(node.rchild,val)......
  • 2019蓝桥杯省赛B组
    2019蓝桥杯省赛B组A.组队方法一:人脑计算(每次选最大,但是一个人不能当两个位)最大值:98+99+98+97+98法二:枚举#include<iostream>using namespace std;//每个位置各编号的评分情况int one[20] = {97, 92, 0, 0, 89, 82, 0, 0, 0, 95, 0, 0, 94, 0, 0, 0......
  • [蓝桥杯 2019 省 A] 填空问题 E
    一、题目描述[蓝桥杯2019省A]填空问题ERSA解密二、问题简析本问题可以分成三部分求解:1、求\(p\)和\(q\):利用唯一分解定理,参考P1075[NOIP2012普及组]质因数分解2、求\(e\):利用拓展欧几里得定理,参考P1082[NOIP2012提高组]同余方程和拓展欧几里得算法3、......
  • 【蓝桥杯备赛】Day13:贪心算法(倒计时30天)
    题目1:题目3040:AnEasyProblem给定一个正整数N,求最小的、比N大的正整数M,使得M与N的二进制表示中有相同数目的1。举个例子,假如给定的N为78,其二进制表示为1001110,包含4个1,那么最小的比N大的并且二进制表示中只包含4个1的数是83,其二进制是1010011,因此83就是答案。输入格......
  • 十五届蓝桥青少C++组3月评测2024年3月中高级
    STEMA考试C++中高级试卷(24年3月10日)一、选择题(50分)1:(110010)2+(c3)16的结果是()。*选择题严禁使用程序验证,选择题不答或答错都不扣分A.(240)10 B.(11110101)2 C.(366)8 D.(f6)16 备注:此题目下标代表进制,因不支持md格式。 参考答案:B2:表达式1000/3的结果......