2016.12.03【初中部 NOIP提高C组】模拟赛题解
来源:互联网 发布:python unpack修饰符 编辑:程序博客网 时间:2024/05/29 10:10
很久没有写题解了,都是改不完题目或者没时间,不像别的神犇当天就可以写完题解了。
T1:
题目大意:有个n*m的一个矩阵,0 为水; 1 为荷叶; 2 为岩石; 3 为于大夫开始的位置; 4 为于大夫要去的目标位置。目前不能到达目的地,在放置最少的莲花前提下,最少几步能走到目的地。
一看题,就知道是搜索。n,m≤100。
30分:
可以用深索,枚举当前当前走到的这个位置放不放荷花,并且递归下一步走到什么方向。显然,时间复杂度很高。
100分:
深搜效率慢,可以考虑广搜,刚搜到的必定是最小答案。但是如果为广搜,他搜索的定是最小的步数而非莲花数。所以我们的标记应更改为:到此处的最少莲花数,在这个前提下,才进行最小步数的搜索。时间复杂度可观。
T2:
题目大意:夏令营有N个人,每个人的力气为M(i)。请大家从这N个人中选出若干人,求这些人可以分成两组且两组力气之和完全相等的方案数。
显然,这个是一个搜索的题目。如果说选N个人就简单一点,但是若干个就香菇了。。。
50分:
因为我们他可以选若干个,所以我们就枚举选多少个人 ,递归即可。时间复杂度(20*3^20)
网上说有3^20次方,应该是不可能的,有重复情况很难处理。
100分:
3^20次方显然超时,所以我们可以采取中途相遇法,把它分成两半进行搜索。对于每一个数,有3种情况(系数):1(放在左边等式),-1(放在右边等式),0(不选)。
有人问,输入1 3 2 ,怎么可以搜索到1+2=3 啊?
1-3=-2,因为你减去了一个数,也就是系数为-1,那么移项就相当于放到另一边了。
搜索后,用A数组存等式左边可能的和,B数组存等式右边可能的和。显然,只要a[i]=b[j]便是一种方案。但不会这么水滴!可能会有重复的情况。所以我们就状压一下它是怎么选的:
系数为1,或者-1,当前的位置标记为选。左边的状态or右边的状态就是你选的状态,标记一下即可。
a,b数组可能很大,所以需要优化来枚举。建议排序,君且随意。
T3:
- 2016.12.03【初中部 NOIP提高C组】模拟赛题解
- 2016.12.03【初中部 NOIP提高C组】模拟赛题解
- 2016.09.03【初中部 NOIP提高组 】模拟赛C题解
- 2016.09.03【初中部 NOIP提高组 】模拟赛C题解
- 2016.09.03【初中部 NOIP提高组 】模拟赛C题解
- 2016.07.13【初中部 NOIP提高组 】模拟赛C题解
- 2016.07.14【初中部 NOIP提高组 】模拟赛C题解
- 2016.08.11【初中部 NOIP提高组 】模拟赛C题解
- 2016.08.11【初中部 NOIP提高组 】模拟赛C题解
- 2016.08.12【初中部 NOIP提高组 】模拟赛C题解
- 2016.08.12【初中部 NOIP提高组 】模拟赛C题解
- 2016.08.13【初中部 NOIP提高组 】模拟赛C题解
- 2016.08.13【初中部 NOIP提高组 】模拟赛C题解
- 2016.07.16【初中部 NOIP提高组 】模拟赛C题解
- 2016.08.13【初中部 NOIP提高组 】模拟赛C题解
- 2016.08.12【初中部 NOIP提高组 】模拟赛C题解
- 2016.08.14【初中部 NOIP提高组 】模拟赛C题解
- 2016.08.14【初中部 NOIP提高组 】模拟赛C题解
- 高仿微信5.2.1主界面及消息提醒
- Android这交互炸了:饿了么是怎么让Image变成详情页的
- vue.js 开发环境搭建最简单攻略
- 【kuangbin带你飞】之搜索 poj3278
- golang中使用package json遇到的问题
- 2016.12.03【初中部 NOIP提高C组】模拟赛题解
- kernel rpm包的制作
- spring mvc传入json返回modelAndView
- 155. Min Stack
- Myeclipse移植其他人的Spring代码
- 个人记录-LeetCode 46. Permutations
- 字符串和字符数组之间的转换
- SSL1762工厂的烦恼
- Android基于蓝牙的聊天demo