1234567章鱼君 发表于 2019-11-12 22:33:35

【章某鱼的学习笔记】想了下还是都放在一个帖子里比较好

本帖最后由 1234567章鱼君 于 2019-11-12 22:44 编辑

一楼就拿来当个目录什么的好了
以后要翻笔记的时候也方便一些
要是一直开贴记笔记应该是要刷屏了orz

记忆化搜索

1234567章鱼君 发表于 2019-11-12 22:39:46

      记忆化搜索
在网上找了一个比较典型的记忆化搜索的题目
对于一个递归函数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;
}

1234567章鱼君 发表于 2019-11-12 22:45:24

我果然是一个需要例题帮助才能理解的人
有例题真的会比较容易懂√
页: [1]
查看完整版本: 【章某鱼的学习笔记】想了下还是都放在一个帖子里比较好