0%

51nod-2562-阿克曼函数

题目:
2656 阿克曼函数
1.0 秒 131,072.0 KB 5 分 1级题
阿克曼(Arkmann)函数 𝐴(𝑚,𝑛) 中,m与n的定义域是非负整数且本题中m<=3,n<=30。

函数的定义为:
𝑎𝑘𝑚(𝑚,𝑛)=⎧⎩⎨⎪⎪𝑛+1𝑎𝑘𝑚(𝑚−1,1)𝑎𝑘𝑚(𝑚−1,𝑎𝑘𝑚(𝑚,𝑛−1))(𝑚=0)(𝑚>0,𝑛=0)(𝑚>0,𝑛>0)

输入
两个整数 m n
输出
一个整数,akm(m,n)的结果
输入样例
1 1
输出样例
3
解法:递归记忆化即可,注意数组范围,数组的大小
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using namespace std;
int a[13][1000000];
int f(int m,int n)
{
if(a[m][n] != 0){
return a[m][n];
}
if(m == 0)
return a[m][n] = n + 1;
else if(n == 0)
return a[m][n] = f(m - 1, 1);
else if(m > 0 && n > 0)
return a[m][n] = f(m - 1,f(m,n - 1));
}
int main()
{
int n,m;
scanf("%d%d",&n, &m);
printf("%d",f(n,m));
}