题目在这里1029
这道题模拟是求解不出来的,数据量过大。通过查找网上的思路,发现这道题有递推公式,既然有递推公式,那么肯定是一项一项求解出来的。
尊重原创,参考的链接在这里点击打开链接
这道题,在根据递推公式求解的时候,我用的是递归,相信很多人也会用递归吧,跟求解斐波拉契数列的样子差不多,只是写好之后,本地运行1 100这个测试用例,发现时间太长了,交上去肯定超时。所以稍微修改了一下,利用一个数组,将许多中间值都存储起来,如果新一轮的递归中结果已经算过了,直接返回就好了;如果没有算过这个结果,就再算一遍。
修改过后,效果挺好的,直接AC,时间好像是0.04秒,下面是代码,仅供参考
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int m;
string rabbits[101];
string addition(string s1, string s2)
{
//对齐
while (s1.size() > s2.size())
{
s2 = "0" + s2;
}
//对齐
while (s1.size() < s2.size())
{
s1 = "0" + s1;
}
//预留0,处理首位进位
s1 = "0" + s1;
s2 = "0" + s2;
//加法
int sum = 0;
for (int i = s1.size() -