错误,超时解决方案
1.首先要看好数据的取值范围,当n的范围较大时应该使用long类型的整型。
2.当数据取值范围定好好后,对于较大数据仍然会出现错误,或者是运行超时。
那么重点就来啦:我们要仔细分析题目要求,对算法进行规划,化简,考虑到仍然超出数据long类型取值范围的情况。
3.没有立即反馈的情况下,自己再用几组数据进行验算,以确保能拿到部分分数。
在竞赛中,我们认为计算机一秒能执行5×105次计算,如果题目给出的时间限制为1s,那么你选择的算法执行的计算次数最多应该在10^8量级才有可能解决这个题目。
一般O(n)的算法能解决的数据范围在n≤10^8
O( n logn)的算法能解决的数据范围在n≤10^6
O(n√n)的算法能解决的数据范围在n≤10^5
O(n2)的算法能解决的数据范围在n≤5000。
O(n3)的算法能解决的数据范围在n≤300
O(2n)的算法能解决的数据范围在n≤25。
O(n!)的算法能解决的数据范围在n≤11。
以上范围仅供参考,实际中还要考虑毎种算法的常数。
贪婪算法
注意分支下还要考虑其他情况,不可轻易只分大类。
递推和递归
1. 递推和递归思想其实都一样,只是一个往前推,一个往后退。
2.它的解法第一步列出它的递推和递归公式。
3,第二步处理边界。
4.但是要注意的是当次数是可规划的情况下就可以直接用简单的枚举方法。其实更有效率。
深度优先搜索和广度优先搜索
1.深度优先搜索用到递推的思想,自身调用自身。一般用于寻找所有存在的情况或者其中的任一情况。有时会用到STL中的栈(Stack)先进后出。其中要注意它的回溯。当访问过的点标记后是否需要解除标记。例如走迷宫就需要标记后解除标记,但寻找草丛块数就不需要解除。还有就是在实现算法时要注意适当进行剪枝,在一定情况下可以节约很多时间以免超时。
2.广度优先搜索用到队列(Queue)先进后出的思想。一般更简洁的寻找到步数最少的结果。可以减少运行时间。
3.当然,dfs和bfs都需要考虑结束条件,否则都会循环无止境。这就需要根据条件来看怎么设置结束。
动态规划
1.这个算法极其高效率的解决问题。它的思想是用动态数组来存放最优解,由末到初,推断出数组改怎样存放数据最优。
2.其中数组存放数也就是用for循环的递推,递归思想。具体实现也真得找规律。
背包
他是动态规划的升级版,算法逻辑更加复杂。
总结
1.递推和递归是算法的基础,其他大多都为递推,递归算法加上新思想演变而来。
2.寻找算法的根本也就是寻找操作与操作之间的联系,尽己所能寻找最优算法,再将边界的情况进行处理即可。
3.emm,有一点就是比如题目结果要求mod的时候要在任一能取的时候都要取一下,否则可能出现错误。