题目:
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)); }
|