이번 문제는 주어진 조건들을 이용하여 재귀함수를 구현하는 문제였다.
#include <iostream>
#include <cstring>
#define MAX 21
using namespace std;
int a, b, c;
int cache[MAX][MAX][MAX];
void Input(){
cin>>a>>b>>c;
}
int w(int a, int b, int c){
if(a<=0||b<=0||c<=0)
return 1;
if(a>=MAX||b>=MAX||c>=MAX)
return w(20, 20, 20);
int &result = cache[a][b][c];
if (result != 0)
return result;
if (a < b && b < c)
result=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
else
result=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
return result;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
while(1){
Input();
if(a==-1&&b==-1&&c==-1)
break;
cout<<"w("<<a<<", "<<b<<", "<<c<<") = "<<w(a,b,c)<<endl;
}
return 0;
}