// 记忆化搜索
// 要注意以下几个条件之间的先后关系
#include<stdio.h>
#include<string.h>
int a,b,c;
int sum;
int dp[30][30][30];
int dfs(int x,int y,int z)
{
if(x<=0 || y<=0 || z<=0)
{
return 1;
}
if(x > 20 || y > 20 || z > 20)
{
dp[20][20][20] = dfs(20,20,20);
return dfs(20,20,20);
}
if(dp[x][y][z] > 0)
{
return dp[x][y][z];
if(x < y && y < z)
{
dp[x][y][z] = dfs(x,y,z-1) + dfs(x,y-1,z-1) - dfs(x,y-1,z);
return dfs(x,y,z-1) + dfs(x,y-1,z-1) - dfs(x,y-1,z);
}
else
{
dp[x][y][z] = dfs(x-1, y, z) + dfs(x-1, y-1, z) + dfs(x-1, y, z-1) - dfs(x-1, y-1, z-1);
return (dfs(x-1, y, z) + dfs(x-1, y-1, z) + dfs(x-1, y, z-1) - dfs(x-1, y-1, z-1));
}
}
int main()
{
while(scanf("%d %d %d",&a,&b,&c))
{
if(a==-1 && b==-1 && c ==-1)
break;
int x;
x = dfs(a,b,c);
printf("w(%d, %d, %d) = %d\n",a,b,c,x);
}
}
Function Run Fun HDU - 1331
最新推荐文章于 2020-01-06 11:20:05 发布