阿克曼函数 51Nod - 2656
考察:记忆化搜索
15min内WA 6次,不愧是我
思路:
按题目意思走即可.
坑点:
- 记忆化数组的n必须开很大,否则WA.因为在m>0&&n>0内,m每减一次1,n就要累加一次和.
- 可能要开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 }