• HDU1978


    //记忆化搜索
    //从左上角走到右下角,每次只能往右走和往下走
    //每个格子有一个数表示在次处能继续走的步子,问从终点到起点有多少种走法
    //dp[i][j]表示走到i,j处有多少种走法
    //开始时先标记dp[n][m]=1,表示走到终点有一种走法,然后就开始记忆化搜索= =,详细看代码

    #include <iostream>
    #include <string.h>
    using namespace std;
    int map[105][105];
    int dp[105][105];
    int n,m;
    bool check(int x,int y)
    {
        if(x>=1&&x<=n&&y>=1&&y<=m)
            return true;
        else
            return false;
    }
    
    int dfs(int x,int y)
    {
        if(dp[x][y]>=0)
            return dp[x][y];
        dp[x][y]=0;
        for(int i=0;i<=map[x][y];i++)
            for(int j=0;j<=map[x][y]-i;j++)
            {
                if(!check(x+i,y+j))//注意是越界了才continue= =
                    break;
                else
                    dp[x][y]=(dp[x][y]+dfs(x+i,y+j))%10000;
            }
        return dp[x][y];
    }
    
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
    
            cin>>n>>m;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                    cin>>map[i][j];
    
            memset(dp,-1,sizeof(dp));//先memset再赋值= =
            dp[n][m]=1;
            printf("%d
    ",dfs(1,1));
        }
        return 0;
    }
    
    
  • 相关阅读:
    搬家
    围棋程序
    图论----基础知识
    贪心算法
    944. 删列造序
    1221. 分割平衡字符串
    面试题 01.01. 判定字符是否唯一
    剑指 Offer 10- II. 青蛙跳台阶问题
    面试题 16.11. 跳水板
    1137. 第 N 个泰波那契数
  • 原文地址:https://www.cnblogs.com/wzsblogs/p/4326272.html
Copyright © 2020-2023  润新知