題目描述
對于一個遞歸函數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;
}