zoukankan      html  css  js  c++  java
  • HDU 1208 Pascal's Travels( 记忆化搜索)

    题目大意:每一小格代表能向右或者向下走几步,问从左上走到右下总共有多少种走法。

        



    dp[i][j]存放该格子有多少总走法。


    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    int n;
    char a[40][40];
    int s[40][40];
    __int64 dp[40][40];
    
    int X[]={1, 0};
    int Y[]={0, 1};
    
    __int64 dfs(int x, int y)
    {
        if(dp[x][y] || !s[x][y])
            return dp[x][y];
        int xx, yy;
        for(int i=0; i<2; i++)
        {
            xx=x+X[i]*s[x][y];
            yy=y+Y[i]*s[x][y];
            if(xx>=0 && xx<n && yy>=0 && yy<n)
                dp[x][y]+=dfs(xx,yy);
        }
        return dp[x][y];
    }
    
    int main()
    {
        while(cin>>n && n!=-1)
        {
            for(int i=0; i<n; i++)
                cin>>a[i];
    
            for(int i=0; i<n; i++)
                for(int j=0; j<n; j++)
                    s[i][j]=a[i][j]-'0';
    
            memset(dp, 0, sizeof(dp));
            dp[n-1][n-1]=1;
    
            cout<<dfs(0,0)<<endl;
        }
        return 0;
    }
    


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    11.13 同步异步协程
    GIL及进程池
    线程
    守护进程-互斥锁-IPC
    进程
    网络编程
    异常的处理
    面向对象编程2
    第一章 python学习,个人对计算机硬件的一些理解
    ActiveReports之直接打印报表
  • 原文地址:https://www.cnblogs.com/wanglaoda/p/4937129.html
Copyright © 2011-2022 走看看