1060-勇者斗恶龙(BFS)
Description
有一头有着N个头的恶龙,有M名骑士,每名骑士有一把魔剑。每一把魔剑有两个参数ci和di。如果当前恶龙的头不小于ci个,则骑士可以使用魔剑砍掉恶龙的恰好ci个头;如果当前恶龙的头小于ci个,则骑士无法使用这把魔剑;如果恶龙还没有死亡(即恶龙的头的个数大于0),则恶龙会立即长出di个头;如果恶龙的头的个数超过L个,则多余的头会脱落,并保持在L个;只有砍掉恶龙所有的头才算是杀死恶龙。
你的任务就是判断这M个骑士能否杀死恶龙,如果可以,请输出最少需要使用魔剑的次数,否则输出“-1”。
Input
输入数据的第一行是三个整数N,M,L(1≤N≤500,1≤M≤10,N≤L≤N+500),表示恶龙有N个头,骑士数目为M,恶龙的头的数量限制为L。紧接着M行,第i行有两个整数ci,di(0≤ci,di≤1,000,1≤i≤M),表示第i把魔剑的参数。如果能够杀死恶龙,则输出最少需要使用魔剑的次数,否则输出“-1”。每把魔剑的使用次数是无限的。
Output
输出一行一个整数B,表示能够杀死恶龙时最少需要使用魔剑的次数,如果不能杀死恶龙,输出-1
Sample Input
20 2 500 7 1 8 5
Sample Output
3
Source
#include<iostream>
#include<queue>
#include<vector>
#include<set>
using namespace std;int head, knight, limit;int bfs(vector<int>&attack,vector<int>&recovery) {//基本初始化set<int>used;queue<int>q;q.push(head);used.insert(head);int step = 1;while (!q.empty()) {//当前层的个数int sz = q.size();for (int k = 0; k < sz; k++) {int cur = q.front();q.pop();//每一轮考虑不同魔剑的使用for (int i = 0; i < knight; i++) {//如果魔剑攻击大于当前头数,无法使用该魔剑if (attack[i] > cur)continue;//攻击恶龙int tmp = cur - attack[i];//如果杀死恶龙,结束if (tmp == 0)return step;//如果没有杀死恶龙,恶龙回血tmp+=recovery[i];//头数不能超过限制if (tmp > limit)tmp = limit;//如果当前情况还未出现if (!used.count(tmp)) {q.push(tmp);used.insert(tmp);}}}//更新步数step++;}//如果无法击杀return -1;
}int main() {cin >> head >> knight >> limit;vector<int>attack(knight);vector<int>recovery(knight);for (int i = 0; i < knight; i++)cin >> attack[i] >> recovery[i];cout << bfs(attack,recovery);return 0;
}
1060-勇者斗恶龙(BFS)相关推荐
- 勇者斗恶龙(BFS)
第四届程序设计大赛 勇者斗恶龙 Time Limit:1000MS Memory Limit:65536K Total Submit:57 Accepted:16 Description 有一头有着 ...
- HDU-1459.非常可乐(BFS )
这道题TLE了很多次,原来一直以为将数字化为最简可以让运算更快,但是去了简化之后才发现,真正耗时的就是化简....还和队友学到了用状态少直接数组模拟刚就能过... 本题大意:给出可乐的体积v1,给出两 ...
- HDU1548:A strange lift(Dijkstra或BFS)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 题意:电梯每层有一个数,例如第n层有个数k, 那么这一层只能上k层或下k层,但是不能低于一层或高 ...
- HDU 1429 胜利大逃亡(续) (BFS+位压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- usaco Overfencing 穿越栅栏(BFS)
Overfencing 穿越栅栏 农夫 John 在外面的田野上搭建了一个巨大的用栅栏围成的迷宫.幸运的是,他在迷宫的边界上留出 了两段栅栏作为迷宫的出口.更幸运的是,他所建造的迷宫是一个" ...
- 数据结构--搜索BFS
文章目录 广度优先搜索 典型例题 广度优先搜索 广度优先搜索类似于树的层次遍历过程.它需要借助一个队列来实现.如图2-1-1所示,要想遍历从v0到v6的每一个顶点,我们可以设v0为第一层,v1.v2. ...
- 2017icpc沈阳 G Infinite Fraction Path BFS+剪枝
题意:给一个长度为n的字符串数组,你可以选定起点跳n次,从i点只能跳到(i*i+1)%n的位置,最后求一个最大字典序. 思路:要求最大的,即每一步都是最大,所以将最大的数都入队进行bfs跳下一步. 剪 ...
- HDU - 5876 Sparse Graph 2016 ACM/ICPC 大连网络赛 I题 bfs+set+补图最短路
题目链接 题意:给的补图,让你求一个源点到其他点的最短距离,因为图太稠密了, 用dij以及spfa根本不得行,这里只能用一种我不会方法来进行,这里用了bfs的方法以及set来维护,分别set维护一个未 ...
- 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)
目录 深度优先遍历(DFS)和广度优先遍历(BFS)原理 1.自己的原理图 2.官方原理图 一.邻接矩阵的深度优先遍历(DFS) 1.原理图 2. 过程: 3.总代码 二.邻接表的深度优先遍历(DFS ...
- hiho_1139_二分+bfs搜索
题目 给定N个点和M条边,从点1出发,到达点T.寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值. 题目链接:二分 最小化最大值,考虑采用二分搜索.对所有的边 ...
最新文章
- 浅谈超文本传输协议(HTTP)
- 详解Android实现全屏正确方法
- html比较难记的点
- 电脑分辨率设置工具_手机也能运行电脑上的软件了?苹果这个办法好
- mysql 组内排名_【原】MySQL分组排序(包含组内排名、求中位数)
- 找到7天内要过生日的记录
- css实现气泡框效果
- OPTEE学习笔记 - IPC
- 如何通过软件实现自动阶梯计电梯费
- window10运行不了1stopt_软件与win10不兼容怎么办?完美解决Win10与软件不兼容的问题...
- OpenAI发布ChatGPT:程序员瞬间不淡定了
- 在Linux系统中访问虚拟机的数据库和访问Windows(本机)下的数据库:
- 永劫无间组装电脑配置推荐2021 玩永劫无间需要什么配置
- 深度学习 - 42.特征交叉与 SENET、Bilinear Interaction 与 FiBiNet
- Custom Data Objects
- 【JavaScript】js中的原型继承
- android自动获取位置,Android中获取当前位置信息
- 七阶拉丁方阵_拉丁方阵
- Android 安卓 自定义标题栏+沉浸式状态栏
- 打造100%绝对安全的个人电脑
热门文章
- bids格式数据中config文件的编写
- -- 34、查询课程名称为“数学“,且分数低于60的学生姓名和分数
- Substrate之旅1:Polkadot是什么
- 【Codeforces】A2组刷题记录(50 / 50)完结
- “千元机皇” realme真我Q3系列发布 越级体验999元起
- java电商快递费收取_电商系统设计之运费模板(上)
- 测试用例----纸杯测试-测试开发面试
- Vue 防抖节流 详细介绍(面试常客、去繁从简、性能优化)
- python实现图片拼接长图_python实现图像拼接
- 腾讯云卖向“有币”区块链