题目描述

对于一个递归函数w(a, b, c)。

如果a <= 0 or b <= 0 or c <= 0就返回值1。

如果a > 20 or b > 20 or c > 20就返回W(20,20,20)。

如果a < b并且b < c 就返回w(a, b, c − 1) + w(a, b − 1, c − 1) − w(a, b − 1, 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)

这是个简单的递归函数,但实现起来可能会有些问题。

输入格式

会有若干行.每行三个数,表示a, b, c。并以−1, −1, −1结束

输出格式

输出若干行,

样例

样例输入

复制1 1 1
2 2 2
-1 -1 -1

样例输出

复制w(1,1,1)=2
w(2,2,2)=4

数据范围与提示

|a|, |b|, |c| < 30

_____________________________________________________________________________

写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

_____________________________________________________________________________

#include<bits/stdc++.h>
using namespace std;
long long a,b,c,p[65][65][65];
long long w(long long x,long long y,long long z){
    if(x<=0 || y<=0 || z<=0){
		return 1;
	}
	else if(x>20 || y>20 || z>20){
		return w(20,20,20);
	}
	else if(p[x][y][z]!=0){
		return p[x][y][z];
	}
	else if(x<y && y<z){
		p[x][y][z]=w(x,y,z-1)+w(x,y-1,z-1)-w(x,y-1,z);
		return p[x][y][z];
	}
	else{
		p[x][y][z]=w(x-1,y,z)+w(x-1,y-1,z)+w(x-1,y,z-1)-w(x-1,y-1,z-1);
		return p[x][y][z];
	}
}
int main(){
	while(cin>>a>>b>>c){
		if(a==-1&&b==-1&&c==-1)return 0;
		long long n=w(a,b,c);
		printf("w(%lld,%lld,%lld)=%lld\n",a,b,c,n);
	}
	return 0; 
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐