阿克曼函数 51Nod - 2656

原题链接

考察:记忆化搜索

15min内WA 6次,不愧是我

思路:

       按题目意思走即可.

坑点:

  1. 记忆化数组的n必须开很大,否则WA.因为在m>0&&n>0内,m每减一次1,n就要累加一次和.
  2. 可能要开long long,
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 typedef long long ll;
 6 const int N = 1000010;
 7 ll f[4][N];
 8 ll dfs(ll m,ll n)
 9 {
10     if(f[m][n]!=-1) return f[m][n];
11     if(!m) return f[m][n] = n+1;
12     else if(m>0&&!n) return f[m][n] = dfs(m-1,1);
13     else if(m>0&&n>0) return f[m][n] = dfs(m-1,dfs(m,n-1));
14 }
15 int main()
16 {
17     int n,m;
18     memset(f,-1,sizeof f);
19     scanf("%d%d",&m,&n);
20     printf("%lld\n",dfs(m,n));
21     return 0;
22 }

 

posted @ 2021-02-17 20:31  acmloser  阅读(80)  评论(0编辑  收藏  举报