不断更新刷题错误Loading……
C++
1、在使用输入完整字符串的时候要把创建的字符数组最好先初始化一下,否则容易出现奇怪的结果。
char a[4][100]={0};
2、在使用递归的时候数值一大容易出现超时的情况,在这时候可以找规律并且结合打表的方式防止超时,自己先写出一些项目可能就能够发现其中的递推规律。
推导可以发现以下结论:
n%2==0时
f(n)=f(n-1)+f(n/2)
n%2==1时
f(n)=f(n-1)
3、回文质数这题对于新手来说可以用一些技巧来保证大数据量的通过。
1、先判断n%2==0 则不可能为质数的条件,先筛选掉一半的数。
2、先判断回文数再判断质数从算法复杂度的角度来说可以大大提高运行速度。
3、先在自己的代码上运行,可以发现在1亿(1 0000 0000)的数据中,最大的回文质数其实是9989899,只有7位数,这样直接可以用if把输入范围缩小十倍(这个方法是支撑我通过最后一个超时点的关键所在)!
4、关于第一次遇到记忆化搜索这个名词,原理就是把经过的值给保存下来,就可以避免很多递归调用的步骤了,但也要依据情况来选择合适的记忆容量。
比如这题就开辟303030就挺好,还有使用typedef来简化代码可以使代码简洁一些,最后注意一下输出的格式。
typedef long long ll;
ll f[30][30][30];