记忆化搜索,说白了就是用一个数组存放之前已经计算过出的数据,避免每次都要重新计算一次
long long int m[25][25][25]={0};
//刚开始傻了,还以为数组要贼大,经判断后只要大于20都可以缩小
long long int w(long long int a,long long int b,long long int c) {
if(a<=0||b<=0||c<=0) return 1;
if(a>20||b>20||c>20) return m[20][20][20]=w(20,20,20);
if(m[a][b][c]) return m[a][b][c];//注意要放到前两个条件后面,避免数组越界
if(a<b&&b<c) return m[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
return m[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);
}
int main() {
long long int a,b,c;
while(cin>>a>>b>>c) {
if(a==-1&&b==-1&&c==-1) break;
cout<<"w("<<a<<", "<<b<<", "<<c<<") = "<<w(a,b,c)<<endl;
}
return 0;
}