这是一篇不知道什么时候才补上的博客,反正已经不知道过去多久了(谢谢,请不要骂我)。这一天讲分治和贪心,然后我就懒得讲了,这两玩意儿是思想,也没有模板,实在不好讲,但我还是不要脸的凑凑字数用心的讲一讲。
frist.分治
分治是将原问题进行分化,拆解成多个小问题,求出小问题的最优解,从而求得原问题的最优解。当然这一过程中会对问题加以限制,使其情况更少,直至最后有唯一答案或易求解。但在这过程中也有可能将原问题复杂化,以达到普遍这一要求。 对题目,分治也有一些要求:1.好拆,能拆才叫分治。2.好合,拆开回不去了还拆他干啥。3.(最小)子问题好求,不然为什么要拆。4.不重复,这是个有些奇怪的要求,主要是为了不变成dp而说的,当然也可以记忆化搜索。思想总归不好讲,还是讲例题吧:(我是打死也不会给题面和代码的)
1.八皇后:暴力思想,暴力所有皇后站的位置。好!这个方法很不错,我很看好它,只是慢了那么一点点罢了,完美的超级高次数的时间.
so,我们不写正解,我们只是思想的搬运工,我毅然决然的采用了这个思想,然后用分治开始写。这可以将问题改变了,修改成了一个有限制的n皇后问题,但对一开始的八皇后并没有限制,所以在这里,子问题就改变了原问题。之后从剩余位置进行枚举,会快很多。
2.快速幂:这里用到了一些数学方法,通过不断做平方操作,将真正计算的次数lng2了是很大的提高。这也是一种分治的思想,平方后再mod,防爆,单数时特别记录一些,即可完成。
3.归并排序:运用分治思想的排序,给下代码:
这是抄的(伪代码),我懒得打了,好好参悟。
还有更高层次的分治,我好像还没参透,等我参透了再说吧。
则就是分治的思想,然后我就要去讲贪心了。
seccond.贪心
这还是一个思想,而且很字面。就是贪心。他的含义就是能拿多少拿多少,类似于打劫。这是一个很常用的思想,题目范围也很广。还是用例题来理解一下吧:
合并石子:题不多说了,最简单的思想就是每次排一下序,合并小的那两堆。这样贪心是达到了,但却失去了时间,极容易超时。所以要有更优的方法。这就用到了运用队列判断。将合并的结果入队但要比较将他放在一个合适的位置。然后比较两个队列的队首和第二位就可以了。
删数问题:删数问题也是一个经典的贪心。不过它贪心的方向是设计的很好的。一般思想都是认为要删最大的,但其实应该删除的是从前往后第一个小于前面的数的前一个,如果没有则删除最后一个。这样才能达到真正贪心的目的。
贪心思想比较简单,但其题型很多遍,可以与很多知识相结合,即使是单独的贪心,也会有很多的贪心方向,还要注意优化。
知识就到这里,我懒得写了。
END.