C/C++教程

SYCOJ1613递归函数

本文主要是介绍SYCOJ1613递归函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目—递归函数 (shiyancang.cn)

记忆化dfs,注意dp的限制范围

#include<bits/stdc++.h>
using namespace std;
const int N=52;
typedef long long ll;
ll dp[N][N][N];
ll a,b,c;
ll dfs(ll a,ll b,ll 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(dp[a][b][c]) return dp[a][b][c];
	else if(a<b&&b<c) dp[a][b][c]=dfs(a,b,c-1)+dfs(a,b-1,c-1)-dfs(a,b-1,c);
	else dp[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 dp[a][b][c];
}
int main()
{
	while(~scanf("%lld%lld%lld",&a,&b,&c),a!=-1&&b!=-1&&c!=-1)
	{
		cout<<dfs(a,b,c)<<endl;
	}
	return 0;
} 

  

这篇关于SYCOJ1613递归函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!