网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月09日漏签0天
蓝桥杯吧 关注:20,556贴子:100,992
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 5回复贴,共1页
<<返回蓝桥杯吧
>0< 加载中...

这个题有人会做吗?求指教

  • 只看楼主
  • 收藏

  • 回复
  • 似尔在
  • 中级粉丝
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
四个专业A、B、C、D,各专业入学新生人数分别是人,新学期开始有一门公共课,按专业划分成四个教学班,四个班在某个相同的时间段上课。已知该时间段还剩余8间空教室可用,编号1~8,每个教室能容纳的人数分别为120,40,85,50,100,140,70,100。试便写一个程序为上述四个教学班分配教室。
找出所有可行的分配方案,对于每个方案依次输出专业A、B、C、D分配的教室编号,按照字典顺序输出所有方案。
输入格式:
一行,包含4个整数(20≤≤120),每2个整数之间用一个空格隔开。
输出格式:
如果存在分配方案,输出若干行,每行表示一种教室的分配方案,包括四个整数,依次表示A、B、C、D四个专业分配的教室编号。
注意: 按照字典顺序输出所有方案。
如不存在分配方案,则输出-1。
样例输出:
109 87 120 81
样例输出:
1 5 6 3
1 5 6 8
1 8 6 3
1 8 6 5
6 5 1 3
6 5 1 8
6 8 1 3
6 8 1 5
样例输出:
100 101 102 103
样例输出:
-1


  • 雪景留痕
  • 铁杆吧友
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
会暴力做。先分别求出哪些教室能容纳a,b,c,d,然后分别遍历,无重复输出就行。


2026-01-09 12:34:07
广告
不感兴趣
开通SVIP免广告
  • 咖啡糖葫芦
  • 活跃吧友
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
应该暴力就可以吧?


  • 那个人163
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
没有优化,只是简单用了回溯,也没有调试,也没测时间,你可以参考一下。
#include<iostream>
using namespace std;
const int N=4;
int temp[N];
int Think; //判断是否有解决方案
struct ClassVolume
{
int volume;
bool use;
};
void SelectClass(ClassVolume pclass[],int a[],int len)
{
if(len>=N)
{
for(int i=0;i<4;i++)
cout<<temp[i]+1<<" ";
cout<<endl;
Think=1;
return;
}
for(int i=0;i<2*N;i++)
{
if(pclass[i].use&&pclass[i].volume>=a[len])
{
pclass[i].use=false;
temp[len]=i;
SelectClass(pclass,a,len+1);
pclass[i].use=true;
}
}
}
int main()
{
int i;
int V_array[8]={120,40,85,50,100,140,70,100};
ClassVolume sClass[8];
for(i=0;i<8;i++)
{
sClass[i].volume=V_array[i];
sClass[i].use=true;
}
int a[N]={0};
for(i=0;i<N;i++)
cin>>a[i];
SelectClass(sClass,a,0);
if(!Think)
cout<<-1<<endl;
return 0;
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 5回复贴,共1页
<<返回蓝桥杯吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示