【章某鱼的学习笔记】想了下还是都放在一个帖子里比较好
本帖最后由 1234567章鱼君 于 2019-11-12 22:44 编辑一楼就拿来当个目录什么的好了
以后要翻笔记的时候也方便一些
要是一直开贴记笔记应该是要刷屏了orz
记忆化搜索 记忆化搜索
在网上找了一个比较典型的记忆化搜索的题目
对于一个递归函数w(a,b,c)
如果 a<=0 or b<=0orc<=0 就返回值1
如果 a>20 or b>20 or c>20就返回w(20,20,20)
如果 a<b并且b<c 就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c)
其它的情况就返回w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAX=30;
int f; //用数组记录,全局变量的初始值为0
int w(int a,int b,int c)
{
if(f!=0) //不等于0即为已经搜索过,可以返回该值
return f;
if(a<=0||b<=0||c<=0)
return 1;
if(a>20||b>20||c>20)
return f=w(20,20,20);
if(a<b&&b<c)
return f=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c-1);
return f=w(a-1,b,c)+w(a-1,b-1,b)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
} //返回时用f=是为了记录该处的值,减少重复搜索的次数
int main()
{
int a,b,c;
while((scanf("%d%d%d",&a,&b,&c))!=EOF)
{
cout<<w(a,b,c)<<endl; //这里是偷懒直接输出要搜索的值了,具体输出看具体题目要求
}
return 0;
} 我果然是一个需要例题帮助才能理解的人
有例题真的会比较容易懂√
页:
[1]