1046-1052

拖了快一个月。。因为11 1有一个算法考试,全身心都在复习。


1046
一开始还以为要用启发式搜索策略,想了好久,后面去网上一看原来都是用的一个公式,结果没有人能说出这个公式的原理~~ 自己想了想,有一点点想法,觉得是因为 m*n 当m和n 都是奇数的时候 一定会走出一个类似
0-0
| |
0-0-0
然后右上角的点要走到最左边那个点,还要遍历其他点, 一定要走一条斜线,所以会导致走的步数变成 m*n-1+sqrt(2.0)
至于为什么其他情况是n*m步,其实挺好想的 因为一共总共n*m个点 每个点都有出度入度,整个图的度数2*n*m,一条边产生2度,所以有n*m条边

1047
代码AC不了,但是做完了,估计是格式的问题,这道题目的描述是真的乱七八糟,但是看了一会还是懂得题目的意思,就是要求大整数的加法,考虑用多位一位的方法去相加。

1048
水题,就是一道简单的字符串处理,将每个字符串-5 就可以,注意是A-E这边会变成Z往前的

1049
水题,青蛙爬出水井问题

1050
这道题一开始我想用的是类似活动安排的时间来解这道题目,后来才发现这道题目中构建活动安排的模型有一两个要注意的地方,因为有可能房间a到房间b的房号大小是不一定的。后来想了想,这道题目求得是需要多少次,这道题目用互斥的思想来做就行,因为从a到b就相当于占用了这段之间所有的走廊,当有c到d,cd这条路径一但和ab有重合的地方就说明在这个走廊有冲突占用,所以至少要两次。因为可以用一个大线段来表示,然后其中进过的线段标1,比如我从1-3 那么我就将1-4 的线段标为1,1-5 那么1-4的线段会变成2,4-5的线段为1。

1051
这道题跟上一道中提到的活动安排有点类似,现将按length 排序,然后贪心,一次尽可能的多切木条,实在不行要换刀片的时候在从length和weight最小的开始切。

1052
田忌赛马问题,这道题目一看上去挺简单的,题目中提到了二分图,受他影响差点就用二分图了,后来理了理思路觉得用贪心就能解出这道题目,一开始贪心是想着计算田忌最多能赢几匹马,也就是说让他的最快大于他能所能大于的最快的。后来发现这种想法在遇见两匹马速度一样的时候会失效,又理了理思路,想着当两匹马速度的时候从最后一匹开始看,看能不能用最烂的一匹马拼掉对方最好的那匹马。结果又过不了。然后只能去网上看看别人的代码,发现想法都跟我差不多,惊喜~~
但是网上的思考更加全面,接下来
然后讨论两者最强的马的三种情形:
1.田忌的马胜于齐王的马
这时田忌的这匹马是所有马中最强的,它必胜,但与谁比对田忌最有利呢?与齐王最强的比,这样使得齐王损失最大(他拿自己最强的马去输了一场比赛)。
2.田忌的马劣于齐王的马
这时齐王的马是最强的,田忌让谁去败给它呢?最劣的那匹。这时齐王的“代价”最大。
3.二者的马势均力敌
这时如果田忌最劣的马是所有中最劣的,就让它跟齐王最强的比较(这时对于田忌的这匹劣马来说并不会比其它的情形坏,因为它注定要输的,而对于田忌的最强的马来说,这个情形也不会比其它的情形差,因为它可能这时会成为所有马中最强者),如果田忌最劣的马不是最劣的,(那就创造条件使这情况满足),说明这匹马强于齐王最劣的,那就让它们比较,田忌胜出,这时双方次劣的马成了最劣的,再看田忌的最劣的马是不是所有中最劣的,还不是?再比较,直到满足为止。
不停地对二者最强的马进行讨论比较,最终所有的马都比过,算法结束。

就是一个两段比较的思想。注意其中最复杂的第三种情况

原文地址:https://www.cnblogs.com/monster5475/p/9907384.html