博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
搜索专题:Balloons
阅读量:7135 次
发布时间:2019-06-28

本文共 1254 字,大约阅读时间需要 4 分钟。

搜索专题:Balloons

这里写图片描述

这道题一看与时间有关,第一想到的就是BFS,定义一个状态,包含每一个状态的剩余气球数,已经进行的时间和每一个志愿者上一次吹气球的时间;
每一次状态转换时,检查是否有没有使用的志愿者,或者是已经休息结束可以进行下一轮吹气球的志愿者,如果没有,就将进行的时间加一,进入下一个状态;第一次写的code超时,主要是没考虑最优结果,在还有志愿者可以使用的时候没有使用,而是又入一次队,导致无形中增加了无数的冗余状态;
代码如下:

#include
#include
#include
#include
using namespace std;const int N = 10 + 5;int per[10][2],m,n;///Ai,Bitypedef struct node{ //定义一个状态 int step,left; int start[N]; node(){
memset(start,-1,sizeof(start));}//没有使用的志愿者标记为-1 bool operator < (const node x)const { return step > x.step; //最小耗时优先拓展 }}Node;int BFS(){ priority_queue
Q; Node t,s; bool can_updata; t.step = 0; t.left = m; Q.push(t); while(!Q.empty()){ t = Q.top();Q.pop(); if(t.left <=0 ) return t.step; can_updata = false; for(int i=0;i
= per[i][1]){ can_updata = true;//是否更新标志 s = t; s.left = t.left - per[i][0]; s.step = t.step + 1; s.start[i] = s.step; Q.push(s); } } if(!can_updata){ //如果全部志愿者还在休息,则时间加1 s = t; s.step = t.step + 1; Q.push(s); } } return -1;}int main(){ scanf("%d %d",&m,&n); for(int i=0;i

转载于:https://www.cnblogs.com/Pretty9/p/7347725.html

你可能感兴趣的文章
Codeforces Round #133 (Div. 2) B. Forming Teams B. Forming Teams 并查集的扩张
查看>>
ECSHOP如何增加红包序列号字符
查看>>
C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 面向全国标准省市县行政数据基础之上的组织机构管理...
查看>>
给你一个承诺 - 玩转 AngularJS 的 Promise(转)
查看>>
python--sum函数--sum(axis=1)
查看>>
蓝桥杯-三羊献瑞
查看>>
继承和动态内存分配——需要为继承类定义 显式析构函数、复制构造函数和赋值运算符...
查看>>
maven "mvn不是内部或外部命令,也不是可运行的程序或批处理文件"
查看>>
深入理解JavaScript系列(31):设计模式之代理模式
查看>>
课程设计之"网络考试系统"(php、Extjs)
查看>>
《茅山后裔》全集(叶欣周铁版),MP3完整资源下载
查看>>
今天Rails都学到了啥
查看>>
Xcode3.2.6异常调试,快速定位出错行
查看>>
ASP.NET MVC显示HTML字符串
查看>>
从头到尾彻底理解KMP(转)
查看>>
使用EditText+ListView并结合TextWatcher实现输入关键字筛选数据
查看>>
二进制、十进制、十六进制相互转换
查看>>
精通MVC网站、MVVM开发模式、Razor语法
查看>>
企业IT架构介绍
查看>>
Watchdog
查看>>