1044-1045

最近算法课 压的喘不过气来,所以做的题目比较少的


1044

这道题目用的是BFS+DFS 首先用BFS将珠宝间的距离和起始点的距离都摸清楚了,然后用DFS进行深度优先走就完事了,一开始想这道题目的时候总是被这个取完珠宝能返回这个给误导了,一直以为要特殊处理,后来看了一下才发现是因为下一个珠宝的最短距离刚好过出发点,所以会先路过出发点,再去到达下一个珠宝的位置。

1045

这道题目看上去蛮简单的,很类似八皇后问题,所以第一想法就是用DFS来解决,然后思考了一下既然这么简单为什么还要加障碍,百思不得其解,然后去网上看资料了,网上代码贼多。千篇一律叫你用二分图去解决这个问题,但是代码都差不多,我甚至怀疑是一个大神的代码传的无数版本,每一篇博客都给出了代码,但是都不讲思路,因为可能他们也没去理解,转载就对了。这种风气实在不能学习,我们还是脚踏实地来学习。

首先需要去了解一下二分图的概念,然后知道一下二分图匹配问题和曾广路问题,因为二分图简单匹配问题都是用的匈牙利算法解决的,这里给出一个我认为解释的比较好的。https://blog.csdn.net/CillyB/article/details/55511666。

然后下一篇是一个解释如何用二分图去理解这道题目的http://www.itdaan.com/blog/2014/08/22/5f46f6a29d87.html 

这边我也给一下自己的思路,首先要把这个map抽象出两个矩阵一个是row 一个是col,我们想法是要把row做为二分图的一个集合x,col做一个集合y,然后这两个集合做一次二分图的最多匹配,得到的结果就是我们题目的答案。为什么这样呢?首先要搞清楚集合x中元素代表的是矩阵的行位置,集合y代表的是矩阵的列位置,那么假设x中有一个点u可以与y中的两个点v,z相连,那么这个解释是什么意思?这个意思我们可以把他解释为在原始矩阵中(u,v) (u,z)是存在的或者说是被标记的,注意(这样子就跟我们要的相反,因为我们希望u这一行只有一个是标记的,所以这样关系刚好可以隐射成二分图。)

(2)所以针对这个题目,我们可以做缩点操作,这样可以缩小集合x和y的大小,那么怎么缩点呢?注意到一个障碍物的左边和右边是可以同时存在(同时标记的),所以我们可以认为左边和右边的是完全不一样的两行。

因此针对第一组测试数据,我们可以得到这么一个数组详情

4

.X..

....

XX..

....

Row数组:

  0  -1   1   1

  2   2   2   2

 -1  -1   3   3

  4   4   4   4

Col数组:

  0  -1   4   5

  0   2   4   5

 -1  -1   4   5

  1   3   4   5

其中-1代表障碍物 0,1,2,3,4,5代表在集合中的点

所以实际上我们可以得到这么两个集合

x={0,1,2,3,4}  ,  y={0,1,2,3,4,5}

然后我们去判断这两个集合怎么生成二分图

然后这边还需要知道这两个集合的匹配含义 即(row,col) 什么时候会存在关系, 在这道题目中只要map(row,col)='.'

 就可以 所以求得这两个集合的最大匹配就是问题的答案~~

这道题用到的知识我0储备,看了一中午的时间,最后终于懂了,感谢上面两篇博文的作者,这里还想说一下,需要不要只给出代码,更重要的是思路吧,重要的是你怎么想的。。

1031水题~ 先按照满意度排序再次按照序号排序,几次就能得到结果
1032水题~ 按照题目给的伪代码,直接暴力法就能过
1033题目看着很复杂其实就是一个按照A和V的含义进行左转和右转,我在代码中用一个变量来标记走的方向。
1034暴力解决即可,值得注意的是从后面往前开始遍历
1035就按照地图上的字母进行运动,然后注意边界和环的判断
1036水题~~~这道题目 蛮简单的也是水题,就是处理一下时间,然后求速度
1037大水题~~ 就是 输出第一个不大于168 的数字
1038水题~ 就是一个求距离 一个求速度
1039水题~ 就是满足三个条件 判断一下 没了。。
1040水题~~ 我很早之前做的 冒泡就完事了
1041这道题目还阔以 包含了一些简单的查找规律,我一开始就觉得有规律可以查找,所以一直在想,后来好像想到可以递推,但是一直写不出递推式,后来网上看了,觉得还蛮有意思的
//a[i] = a[i-1]中的01个数 而 a[i-1]的01 个数为 a[i-2] 中00 和1的个数计数 故 a[i-1]的01 个数为 a[i-1]'=a[i-2]+2^(i-3)//a[i]=a[i-2]+2^(i-3)
递推:0->10 ?;? ? ? ? ?1->01;? ? ? ? ?00->1010;? ? ? ? ?10->0110;? ? ? ? ? 01->1001;? ? ? ? ? 11->0101;假设a[i]表示第i 步时候的00的个数,由上面的可以看到,00是由01 得到的,所以只要知道a[i-1]的01的个数就能够知道a[i]的00的个数了,那a[i-1]怎么求呢,同样看推导,01由1和00 得到,而第i步1的个数是2^(i-1),所以a[i]=2^(i-3)+a[i-2];
本文来自 vsooda 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/vsooda/article/details/7997111?utm_source=copy
1042咋一看是水题,其实还是有一点点东西的,要注意的是用万位制来模拟数组进位,不再是普通的十进制,还有就是在处理最后输出的时候 第一个万位进制输出即可,其他要进行补0操作。
1043对于八码问题,使用数学知识康托展开加上BFS暴力搜索应该可以ac。康托展开其实就是全排列中一个比较思想,我上次做题的时候也用到了这个思想就是不知道名字叫做康托展开,主要思想是给定一个序列a1a2a3aa5a6...an如何求出这个是全排列中第几个大小 比如123 是1、2、3全排列中最小的,132是倒数第二小的,那这个求法就是从第一位数到最后一位可以确定n-1位的,就是HDOJ的1027。通过这道题了解到两种算是剪枝的思想,这边也想用这道题目练一下手,一种是A* 一种是IDA*
1044这道题目用的是BFS+DFS 首先用BFS将珠宝间的距离和起始点的距离都摸清楚了,然后用DFS进行深度优先走就完事了,一开始想这道题目的时候总是被这个取完珠宝能返回这个给误导了,一直以为要特殊处理,后来看了一下才发现是因为下一个珠宝的最短距离刚好过出发点,所以会先路过出发点,再去到达下一个珠宝的位置。
1045这道题目看上去蛮简单的,很类似八皇后问题,所以第一想法就是用DFS来解决,然后思考了一下既然这么简单为什么还要加障碍,百思不得其解,然后去网上看资料了,网上代码贼多。千篇一律叫你用二分图去解决这个问题,但是代码都差不多,我甚至怀疑是一个大神的代码传的无数版本,每一篇博客都给出了代码,但是都不讲思路,因为可能他们也没去理解,转载就对了。这种风气实在不能学习,我们还是脚踏实地来学习。首先需要去了解一下二分图的概念,然后知道一下二分图匹配问题和曾广路问题,因为二分图简单匹配问题都是用的匈牙利算法解决的,这里给出一个我认为解释的比较好的。https://blog.csdn.net/CillyB/article/details/55511666。然后下一篇是一个解释如何用二分图去理解这道题目的http://www.itdaan.com/blog/2014/08/22/5f46f6a29d87.html 这边我也给一下自己的思路,首先要把这个map抽象出两个矩阵一个是row 一个是col,我们想法是要把row做为二分图的一个集合x,col做一个集合y,然后这两个集合做一次二分图的最多匹配,得到的结果就是我们题目的答案。为什么这样呢?首先要搞清楚集合x中元素代表的是矩阵的行位置,集合y代表的是矩阵的列位置,那么假设x中有一个点u可以与y中的两个点v,z相连,那么这个解释是什么意思?这个意思我们可以把他解释为在原始矩阵中(u,v) (u,z)是存在的或者说是被标记的,注意(这样子就跟我们要的相反,因为我们希望u这一行只有一个是标记的,所以这样关系刚好可以隐射成二分图。)(2)所以针对这个题目,我们可以做缩点操作,这样可以缩小集合x和y的大小,那么怎么缩点呢?注意到一个障碍物的左边和右边是可以同时存在(同时标记的),所以我们可以认为左边和右边的是完全不一样的两行。因此针对第一组测试数据,我们可以得到这么一个数组详情4.X......XX......Row数组:  0  -1   1   1  2   2   2   2 -1  -1   3   3  4   4   4   4Col数组:  0  -1   4   5  0   2   4   5 -1  -1   4   5  1   3   4   5其中-1代表障碍物 0,1,2,3,4,5代表在集合中的点所以实际上我们可以得到这么两个集合x={0,1,2,3,4}  ,  y={0,1,2,3,4,5}然后我们去判断这两个集合怎么生成二分图然后这边还需要知道这两个集合的匹配含义 即(row,col) 什么时候会存在关系, 在这道题目中只要map(row,col)='.' 就可以 所以求得这两个集合的最大匹配就是问题的答案~~这道题用到的知识我0储备,看了一中午的时间,最后终于懂了,感谢上面两篇博文的作者,这里还想说一下,需要不要只给出代码,更重要的是思路吧,重要的是你怎么想的。。













猜你喜欢

转载自www.cnblogs.com/monster5475/p/9786298.html