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

筅森魡賤 提交于 2020-02-05 02:29:52

题目描述
考虑如下的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;;
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!