[HDU]1208Pascal's Travels

http://acm.hdu.edu.cn/showproblem.php?pid=1208

起点在左上角,终点在右下角,而每一次走的步伐树只能等于该点的数值,值得注意的是0为死胡同。

另外结果在2^63内,所以要用long long,

还有= = ! 这道题地图每点的数值没有空格,所以不能%d直接输入,应该用字符型输入,再转化成整形。

#include"stdio.h"
#include"string.h"
long long dp[50][50];
int main()
{
      int n,i,j;
      int map[50][50];
      char s[50][50];
      while(scanf("%d",&n)!=EOF)
      {
           if(n==-1) break;
           memset(dp,0,sizeof(dp));
           dp[1][1]=1;          
           for(i=1;i<=n;i++)
           {
                scanf("%s",&s[i]);
                for(j=1;j<=n;j++)
                map[i][j]=s[i][j-1]-'0';
           }
           for(i=1;i<=n;i++)
           for(j=1;j<=n;j++)
           {
              if(!map[i][j])
              continue;              
              if(i+map[i][j]<=n)
              dp[i+map[i][j]][j]+=dp[i][j];
              if(j+map[i][j]<=n)
              dp[i][j+map[i][j]]+=dp[i][j];
           }
           printf("%I64d\n",dp[n][n]);
      }
}

 

 

posted @ 2013-08-10 11:33  天际。  阅读(430)  评论(0编辑  收藏  举报