【递归与递推】递归函数(reduce)------------------记忆化搜索

题目描述
考虑如下的3参数递归函数w(a,b,c);
如果a≤0或b≤0或c≤0,则w(a,b,c)=1;
如果a>20或b>20或c>20,则w(a,b,c)=w(20,20,20);
如果a其他情况下:w(a,b,c)=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1, b-1,c-1)。
设计一个程序,快速计算w(a,b,c)并给出结果。
输入
1行整数,包含3个数值,分别对应a、b和c的值。
输出
一个数,即w(a,b,c)的结果。
样例输入 Copy
50 50 50
样例输出 Copy
1048576

#include<bits/stdc++.h>
using namespace std;
int f[21][21][21];
int a,b,c;
int dfs(int a,int b,int c)
{
	if(a<=0||b<=0||c<=0) return 1;
	else if(a>20||b>20||c>20) return dfs(20,20,20);
	else if(f[a][b][c]) return f[a][b][c];
	else f[a][b][c]=dfs(a-1,b,c)+dfs(a-1,b-1,c)+dfs(a-1,b,c-1)-dfs(a-1,b-1,c-1);
	return f[a][b][c];
}
int main()
{
	cin>>a>>b>>c;
	cout<<dfs(a,b,c)<<endl;;
}

发布了383 篇原创文章 · 获赞 7 · 访问量 8054

猜你喜欢

转载自blog.csdn.net/qq_43690454/article/details/104174693