dfs
zyz_3_14159
这个作者很懒,什么都没留下…
展开
-
LightOJ1018- Brush (IV) -状态压缩,DFS
题目大意:在二维平面坐标系上给你n的点,问你最少能用几条直线把他们都包括里面;题目解析:首先我们要预处理所有的直线出来,令s[i][j]表示由点i和点j所确定的直线能经过的点的集合,为此我们需要暴力n^3处理出来,接下来就是状态dp了,如果我们不用记忆化搜索DFS就会超时,所以只能DFS了,DFS中的break很关键,很抽象需要自行体会;AC代码:#include#include#原创 2016-10-08 19:23:13 · 255 阅读 · 0 评论 -
玲珑杯-1058-dfs
题目大意:给定a和n个数字,现在要从n个数字中取出若干个,使得a modc1 ...modcr=0,问最少需要取出几个,没有的话输出-1;题目解析:先将数组sort一下,然后dfs;AC代码:#include#include#include#include#includeusing namespace std;typedef long long ll;const int原创 2016-11-26 19:01:45 · 230 阅读 · 0 评论 -
LightOJ-1033-区间dp,dfs
题目大意:给定一段字符串,问最少能添加多少个字母使得这个字符串能够成为回文字符串;题目解析:区间dp,定义dp[i][j]为把区间[i,j]中的字符全部转化为回文字符串所需要的最少次数,那么我们dfs记忆化搜索就好了;AC代码:#include#include#include#include#includeusing namespace std;const int inf=原创 2016-10-21 10:25:05 · 255 阅读 · 0 评论 -
LightOJ-1060-dfs,组合数学
题目大意:给一段字符串,可以任意将其中两个字符进行交换,问最后所有的情况中按字典序排序的第k中情况是多少,如果没有就输出impossible;题目解析:按位枚举,从高位枚举,如果在当前位置后面的情况>=k,说明那个位肯定是正确的了,再枚举下一位,反之,将当前为的cur+1;AC代码:#include#include#include#include#includeusing n原创 2016-10-29 17:42:22 · 282 阅读 · 0 评论 -
LightOJ-1057-状压dp,记忆化
题目大意:有一张n*m的图,上面有一个起始点x,和最多15个金子g,每一步你可以走到相邻的8个格子,题目要求走完所有的金子并且返回初始点的最小路径是多少;题目解析:状态压缩,定义dp[i][j]表示在j序列下在第i个金子需要走的最小路径,如果是已经没有金子的话就返回到开始点的距离,dp的时候需要记忆化搜多dfs并且枚举的时候要恢复序列的值,有点像回溯法;AC代码:#include#i原创 2016-10-29 13:25:55 · 308 阅读 · 0 评论 -
LightOJ-1031-区间dp,dfs
题目大意:有n张卡片,有两个人,每次可以从左边或者右边拿走几张卡片,他们都是想自己赢,所以每次选择都是最优的,问最后差值是多少;题目解析:对于区间[l,r],用dp[l,r]表示其区间能选择的最大值,那么假设从左边拿走了i个卡片,那么第二个人能选的最大值就是dp[l+i][r],第一个就是sum[r]-sum[l-1]-dp[l+i][r],所以dp[l][r]=max(dp[l][r],su原创 2016-10-18 20:07:53 · 208 阅读 · 0 评论 -
codeforces723D-Lakes in Berland-DFS
题目大意:给你一张图,里面的连通块(不能含有边界)就是湖,现在你要在湖上面填泥土,使得这片土地上的湖数量减少到k个,问你最少要填多少块泥土;题目解析:首先要使湖的数量减少,肯定要使一整个湖填完,否则这个湖只可能变成1个或2个,所以我们需要对所有的湖排个序,把面积最小的湖填掉就可以了,把湖初始化出来只要dfs可以了,填湖再dfs一下即可;AC代码:#include#include#i原创 2016-10-04 13:23:20 · 394 阅读 · 0 评论 -
Codeforces731C-dfs
题目大意:给你若干个袜子,一共有k种颜色,要使得最终对应的一双袜子颜色都相同,你可以改变一只袜子的颜色,问你最少需要改变几次;题目解析:把所有的袜子想象成一个点,如果第i个和第j个袜子是一双的话,那么第i个和第j个就有一条边,那么预处理完成之后就会出现几个连通图,队友每个连通图,我们需要找出颜色最多的颜色,然后把这个连通图里其他颜色的袜子都变成这个颜色,这样次数才是最少,求连通的时候需要dfs原创 2016-10-17 13:04:07 · 272 阅读 · 0 评论 -
LightOJ1030-Discovering Gold-dp
题目大意:有n个点,开始在1这个点,每次用筛子前进,每到达一个新的点,就把当前的点的金子收下,如果那个点>n就返回去重新抛,问你最后金子的期望是多少;题目解析:概率dp,一开始一直想着从前面开始dp,肯定不可以因为时间复杂度太高,应该从后面开始dp,这样就是记忆化搜索了,时间复杂度会大大降低;AC代码:#include#include#include#include#inclu原创 2016-10-16 15:29:10 · 292 阅读 · 0 评论 -
LightOJ-1071-dp,dfs
题目大意:给定一张网格图,起始点为(1,1),终点为(n,m),需要来回走两次,但是只允许起点终点是一样的,其余都不可以,问最多可以帮助多少个人;题目解析:我们可以转化一下,转化成两个人,一个人从(1,2)出发走向(n-1,m),另一个人从(2,1)出发,走向(n,m-1);假设他们两个人在途中某一点(x,y)相遇了,那么他们两个到达这个点所经过的时间一定相同,所以要保证两个人始终不会相遇,只原创 2016-11-03 21:42:14 · 305 阅读 · 0 评论 -
LightOJ1023-Discovering Permutations -dfs
题目大意:给你从A开始的n个字母,你需要将它们组成k组排列并且不能重复,要求你按照字典序从小到大输出题目解析:总感觉可以用dfs构造成一棵树一样,我们令数组a表示dfs时候的当前可用字母,依次从小到大枚举,枚举的过程中dfs,并且令数组x来保存我们取的结果;AC代码:#include#include#include#include#includeusing namespace原创 2016-10-12 00:28:37 · 244 阅读 · 0 评论 -
SZUOJ-大作业
世界名画陈列馆由 mx n个陈列室组成为防止名画被盗,需要在陈列室中设置警卫机器人哨位每个警卫机器人除了监视它所在的陈列室外,还可监视与它所在陈列室相邻的上、下、左、右 4个陈列室设计一个算法,安排警卫机器人哨位,使得名画陈列馆中每一个陈列室都在警卫机器人的监视之下,且所用的警卫机器人最少:#include #include #include #inc原创 2016-12-27 19:16:32 · 625 阅读 · 0 评论