记忆查找法
情况:在算法题目提交答案时出现超时的情况。
理解:本题要计算输入的值为n时符合要求的数,可以找到规律,a(n)=a(n-2)+a(n/2),如当求的n为a(101)时就要求a(99)和a(50),当求a(100)是也要求a(50),这里的a(50)要求非常多次,要浪费非常多的时间,不如把a(0)到a(n)的值先求出来存入一个数组里面,以后使用就可以直接提取了,节约了很大一部分时间。
题目来自洛谷:https://www.luogu.org/problemnew/show/P1028
图片问题
#include<iostream>
#include<string.h>
#include<fstream>
#include<math.h>
int n,a[1000];
inline int b(int n)
{
if(n==1||n==0) return 1;
return (a[n-2]+a[n/2]);
}
using namespace std;
int main()
{
for(int i=0;i<1000;i++)
{a[i]=b(i);}
cin>>n;
cout<<a[n];
return 0;
}