POJ 1579 Function Run Fun

原题地址:http://poj.org/problem?id=1579

题目大意:给你一个递归式,计算给定数字的值。如果直接实现的话,会TLE.

这个题目我刚看的的时候,把题目描述中的"if a <= 0 or b <= 0 or c <= 0, then w(a, b, c) returns: 


if a > 20 or b > 20 or c > 20, then w(a, b, c) returns: 
w(20, 20, 20) "的or硬是想成了and,以至于没有思路。看了一下别人的题解,才知道。但在实现的时候,应该是打表,又写成了递归调用函数。。。

思路:简单的动态规划,直接打表,开一个三维数组,将(0,0,0)~(20,20,20)间的数都打在表中,就OK了

#include 
   
   
    
    
#include 
    
    
     
     

int arr[30][30][30];//开一个三维数组,用来打表
//函数w用来给定三维数组下标得到该元素的值
int w(int a,int b,int c)
{
    if((a <= 0)||(b <= 0)||(c <= 0))
    return 1;
    if((a < b)&&(b < c))
    return arr[a][b][c-1]+arr[a][b-1][c-1]-arr[a][b-1][c];
    return arr[a-1][b][c] + arr[a-1][b-1][c] + arr[a-1][b][c-1] - arr[a-1][b-1][c-1];
}

int main()
{
    int i,j,k;
    int x,y,z;//保存输入的三个数字
    for(i = 0;i < 21;i++)//三层for循环,打表
    {
        for(j = 0;j < 21;j++)
        {
            for(k = 0;k < 21;k++)
            {
                arr[i][j][k] = w(i,j,k);
            }
        }
    }
    while(scanf("%d%d%d",&x,&y,&z) != EOF)
    {
        if(x == -1 && y == -1 && z == -1)
        break;
        if(x < 0 || y < 0 || z < 0)
        printf("w(%d, %d, %d) = %d\n",x,y,z,arr[0][0][0]);
        else if(x > 20 || y > 20 || z > 20)
        printf("w(%d, %d, %d) = %d\n",x,y,z,arr[20][20][20]);
        else printf("w(%d, %d, %d) = %d\n",x,y,z,arr[x][y][z]);
    }
    return 0;
}

    
    
   
   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值