hdu1208

来源:互联网 发布:linux内核双机调试 编辑:程序博客网 时间:2024/06/05 11:43

题目链接:点击打开链接

题目是要求从左上角到右下角的路径数,只能向下或者向右走方格里的数;

#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=35;const int INF=0x3f3f3f3f;char m[maxn][maxn+10];long long d[maxn][maxn],vis[maxn][maxn];const int nx[]= {0,1};const int ny[]= {1,0};int n,cunt;long long dp(int x,int y){    if(x<0||x>n-1||y<0||y>n-1)return 0;    if(vis[x][y])return d[x][y];    vis[x][y]=1;    for(int i=0; i<2; i++)        d[x][y]+=dp(x+(m[x][y]-'0')*nx[i],y+(m[x][y]-'0')*ny[i]);    return d[x][y];}int main(){    int i,j;    while(scanf("%d",&n)&&n!=-1)    {        cunt=0;        for(i=0; i<n; i++)         scanf("%s",m[i]);        memset(d,0,sizeof(d));        memset(vis,0,sizeof(vis));        d[n-1][n-1]=1;        vis[n-1][n-1]=1;        long long Min=INF;        dp(0,0);        printf("%lld\n",d[0][0]);    }    return 0;}


原创粉丝点击