题目描述
安安经常找一些很有趣的数学书来阅读以增长自己的数学知识。
一天,她偶然发现一个递归函数f(a,b,c)有以下性质:
- 如果a<0或b<0或c<0,就返回值1;
- 如果a>20或b>20或c>20,就返回f(20,20,20);
- 如果同时满足第一条和第二条,就按照第一条;
- 其它别的情况就返回f(a-1,b,c)+f(a-1,b-1,c)+f(a-1,b,c-1)-f(a-1,b-1,c-1)。
安安想通过编程求出这个递归函数的值,你能帮助他吗?
输入
一行,a,b,c三个整数
输出
a,b,c三个整数所对应的w(a,b,c)函数的值
-
样例输入1:
1 1 1
样例输出1:
4
样例输入2:
50 50 50
样例输出2:
2097152
上代码:
#include<iostream>
using namespace std;
int d[105][105][105];
int f(int a,int b,int c)
{
if(a<0||b<0||c<0)
{
return 1;
}
if(d[a][b][c])
{
return d[a][b][c];
}
if(a>20||b>20||c>20)
{
return f(20,20,20);
}
return d[a][b][c]=f(a-1,b,c)+f(a-1,b-1,c)+f(a-1,b,c-1)-f(a-1,b-1,c-1);
}
int main()
{
int a,b,c;
cin>>a>>b>>c;
cout<<f(a,b,c);
}