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)相关推荐

  1. 勇者斗恶龙(BFS)

    第四届程序设计大赛 勇者斗恶龙 Time Limit:1000MS  Memory Limit:65536K Total Submit:57 Accepted:16 Description 有一头有着 ...

  2. HDU-1459.非常可乐(BFS )

    这道题TLE了很多次,原来一直以为将数字化为最简可以让运算更快,但是去了简化之后才发现,真正耗时的就是化简....还和队友学到了用状态少直接数组模拟刚就能过... 本题大意:给出可乐的体积v1,给出两 ...

  3. HDU1548:A strange lift(Dijkstra或BFS)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 题意:电梯每层有一个数,例如第n层有个数k, 那么这一层只能上k层或下k层,但是不能低于一层或高 ...

  4. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  5. usaco Overfencing 穿越栅栏(BFS)

    Overfencing 穿越栅栏 农夫 John 在外面的田野上搭建了一个巨大的用栅栏围成的迷宫.幸运的是,他在迷宫的边界上留出 了两段栅栏作为迷宫的出口.更幸运的是,他所建造的迷宫是一个" ...

  6. 数据结构--搜索BFS

    文章目录 广度优先搜索 典型例题 广度优先搜索 广度优先搜索类似于树的层次遍历过程.它需要借助一个队列来实现.如图2-1-1所示,要想遍历从v0到v6的每一个顶点,我们可以设v0为第一层,v1.v2. ...

  7. 2017icpc沈阳 G Infinite Fraction Path BFS+剪枝

    题意:给一个长度为n的字符串数组,你可以选定起点跳n次,从i点只能跳到(i*i+1)%n的位置,最后求一个最大字典序. 思路:要求最大的,即每一步都是最大,所以将最大的数都入队进行bfs跳下一步. 剪 ...

  8. HDU - 5876 Sparse Graph 2016 ACM/ICPC 大连网络赛 I题 bfs+set+补图最短路

    题目链接 题意:给的补图,让你求一个源点到其他点的最短距离,因为图太稠密了, 用dij以及spfa根本不得行,这里只能用一种我不会方法来进行,这里用了bfs的方法以及set来维护,分别set维护一个未 ...

  9. 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)

    目录 深度优先遍历(DFS)和广度优先遍历(BFS)原理 1.自己的原理图 2.官方原理图 一.邻接矩阵的深度优先遍历(DFS) 1.原理图 2. 过程: 3.总代码 二.邻接表的深度优先遍历(DFS ...

  10. hiho_1139_二分+bfs搜索

    题目 给定N个点和M条边,从点1出发,到达点T.寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值.  题目链接:二分      最小化最大值,考虑采用二分搜索.对所有的边 ...

最新文章

  1. 浅谈超文本传输协议(HTTP)
  2. 详解Android实现全屏正确方法
  3. html比较难记的点
  4. 电脑分辨率设置工具_手机也能运行电脑上的软件了?苹果这个办法好
  5. mysql 组内排名_【原】MySQL分组排序(包含组内排名、求中位数)
  6. 找到7天内要过生日的记录
  7. css实现气泡框效果
  8. OPTEE学习笔记 - IPC
  9. 如何通过软件实现自动阶梯计电梯费
  10. window10运行不了1stopt_软件与win10不兼容怎么办?完美解决Win10与软件不兼容的问题...
  11. OpenAI发布ChatGPT:程序员瞬间不淡定了
  12. 在Linux系统中访问虚拟机的数据库和访问Windows(本机)下的数据库:
  13. 永劫无间组装电脑配置推荐2021 玩永劫无间需要什么配置
  14. 深度学习 - 42.特征交叉与 SENET、Bilinear Interaction 与 FiBiNet
  15. Custom Data Objects
  16. 【JavaScript】js中的原型继承
  17. android自动获取位置,Android中获取当前位置信息
  18. 七阶拉丁方阵_拉丁方阵
  19. Android 安卓 自定义标题栏+沉浸式状态栏
  20. 打造100%绝对安全的个人电脑

热门文章

  1. bids格式数据中config文件的编写
  2. -- 34、查询课程名称为“数学“,且分数低于60的学生姓名和分数
  3. Substrate之旅1:Polkadot是什么
  4. 【Codeforces】A2组刷题记录(50 / 50)完结
  5. “千元机皇” realme真我Q3系列发布 越级体验999元起
  6. java电商快递费收取_电商系统设计之运费模板(上)
  7. 测试用例----纸杯测试-测试开发面试
  8. Vue 防抖节流 详细介绍(面试常客、去繁从简、性能优化)
  9. python实现图片拼接长图_python实现图像拼接
  10. 腾讯云卖向“有币”区块链