分析:题意很简单,调用函数,根据a,b,c的值在递归调用函数。我们只要把w(a,b,c)从(1,1,1)计算到w(20,20,20)就行了,询问时直接就可以输出了。
# include <stdio.h>
int dp[25][25][25];
int Dp(int a,int b,int c)
{
if(a<=0||b<=0||c<=0)
return 1;
if(a>20||b>20||c>20)
return dp[20][20][20];
if(a<b&&b<c)
return dp[a][b][c-1]+dp[a][b-1][c-1]-dp[a][b-1][c];
else
{
if(a<=1)
return 2;
if(b<=1&&c>1)
return dp[a-1][b][c]+dp[a-1][b][c-1];
if(b<=1&&c<=1)
return dp[a-1][b][c]+1;
else
return dp[a-1][b][c]+dp[a-1][b-1][c]+dp[a-1][b][c-1]-dp[a-1][b-1][c-1];
}
}
int main()
{
int a,b,c,i,j,k;
for(i=1;i<=20;i++)
for(j=1;j<=20;j++)
for(k=1;k<=20;k++)
dp[i][j][k]=Dp(i,j,k);
while(scanf("%d%d%d",&a,&b,&c)!=EOF)
{
if(a==-1&&b==-1&&c==-1)
break;
printf("w(%d, %d, %d) = %d\n",a,b,c,Dp(a,b,c));
}
return 0;
}