二分+Dfs【p1902】刺杀大使】的更多相关文章

刺杀大使 一道并不难的二分题,竟让我交了上20次,诶,果然还是我太弱了. 看完题目就基本想到要怎么做了: 只需要对最小伤害代价进行二分即可,check()函数里用搜索判断是否可以到达最后一行,这里的check()用深搜广搜都可以,两种的代码下面都会给出,而经过检验,这道题目用深搜会优于广搜. 如果你不像我一般手滑的话,此题基本就可以过了. 然而,导致我反复提交20遍的原因,不是二分答案时卡循环的问题,而是,,, ​ 数组开小了 这也给我提了个醒,不是所有的re都是二分循环的锅,有时候要考虑数组越…
题目传送门 方法:二分答案+dfs 二分一个mid,此次刺杀的最大伤害,作为判断条件来dfs,二分,更新. 我们二分一个答案mid来表示一个界限,如果当前这个格子的伤害代价比mid小则可以走否则就不走,每次check函数只需判断能否从第一行走到最后一行即可,因为每一行的每个门都是相连的,所以只要有一个能到,那么我们再派m-1个人顺着这条路过去再沿着横向的门过去就好啦,因为第一行和最后一行的伤害值为零,所以这么做莫得问题. 问: 为什么dfs时只要判断是否能到达即可,我们不是要找他的最大值来表示这…
题目描述 伊朗伊斯兰革命卫队(某恐怖组织)正在策划一起刺杀行动,他们的目标是沙特驻美大 使朱拜尔.他们来到了沙特驻美使馆,准备完成此次刺杀,要进入使馆首先必须通过使馆前 的防御迷阵. 迷阵由 n*m 个相同的小房间组成,每个房间与相邻四个房间之间有门可通行.在第 n 行的 m 个房间里有 m 个机关,这些机关必须全部打开才可以进入大使馆.而第 1 行的 m 个 房间有 m 扇向外打开的门,是迷阵的入口.除了第 1 行和第 n 行的房间外,每个房间都被 使馆的安保人员安装了激光杀伤装置,将会对进入…
题目 二分加广搜 #include <bits/stdc++.h> using namespace std; int n, m, l, r, p[1001][1001], vis[1001][1001]; int dx[6] = {0, 1, -1, 0, 0}; int dy[6] = {0, 0, 0, 1, -1}; int qx[100100], qy[1001001]; bool check(int d) { memset(vis, 0, sizeof(vis)); int fron…
题目描述--->p1902 刺杀大使 题意概括: 找一条路径,使得从第1行到第n行路径的最大值最小. 分析: 题目概括出来,很容易想到二分. 求最大值最小,因此我们可以对最大伤害值进行二分. 如果某位置所受伤害值大于我们当前所限制的伤害值,我们肯定是不走这条路的. 栗子: 我们限制最大伤害为5 搜索到某一行发现伤害值是这样的--> 8 8 8 8. 这样我们是无法通过这一行的. 做法: 我们需要标记是否能以当前限制的伤害值走到最后一行,如果可以我们就去寻求更小伤害,如果不能我们只能去寻求较小伤…
D. Alyona and a tree Problem Description: Alyona has a tree with n vertices. The root of the tree is the vertex 1. In each vertex Alyona wrote an positive integer, in the vertex i she wrote ai. Moreover, the girl wrote a positive integer to every edg…
题目链接:BZOJ - 1082 题目分析 二分 + DFS验证. 二分到一个 mid ,验证能否选 mid 个根木棍,显然要选最小的 mid 根. 使用 DFS 验证,因为贪心地想一下,要尽量先用提供的小的木木棍,尽量先做出需要的大的木棍,所以要先将提供的木棍和需要的木棍都排序. DFS 的时候是按照需要的木棍从大到小的顺序一层一层搜,每一层上是按照从小到大的顺序枚举提供的木棍.(当然枚举的时候已经不一定是从小到大了,有些木棍已经被截掉了一些.) 要使用两个有效的剪枝: 1)如果下一层的木棍和…
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1307 题意: 中文题诶~ 思路: 解法1:暴力树剖 用一个数组 num[i] 维护编号为 i 的边当前最大能承受的重量. 在加边的过程中根据给出的父亲节点将当前边所在的链上所有边的num都减去当前加的边的重量, 注意当前边也要减自重. 那么当num首次出现负数时加的边号即位答案: 事实上这个算法的时间复杂度是O(n^2)的, 不过本题并没有出那种退化成单链的…
http://www.lydsy.com/JudgeOnline/problem.php?id=1082 题意:n个给出木板,m个给出木板.可以将那m个木板锯成泥想要的长度.问最大能锯成多少个给出的n个木板.(n<=1000, m<=50) #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #inclu…
http://www.lydsy.com/JudgeOnline/problem.php?id=1146 第一种做法(时间太感人): 第二种做法(rank5,好开心) ================================8-20=============================== 这题我真的逗了,调了一下午,疯狂造数据,始终找不到错. 后来发现自己sb了,更新那里没有打id,直接套上u了.我.... 调了一下午啊!一下午的时光啊!本来说好中午A掉去学习第二种做法,噗 好吧,…