uva 825 Walking on the Safe Side(dp)

来源:互联网 发布:云免软件下载 编辑:程序博客网 时间:2024/05/22 15:15


dp[i][j]表示走到(i,j)这一步有多少种走法

要保证最短路径长度就只能左走或下走

于是转移方程:

dp[i][j]=dp[i-1][j]+dp[i][j-1]

数据不好读

每两组数据之间需要输出一个空行,不输出竟然是WA而不是PE,坑了好久

#include<stdio.h>#include<string.h>#define MAXN 1005int dp[MAXN][MAXN];int map[MAXN][MAXN];int n,m;char s[MAXN];int main(){int t,cas;scanf("%d",&cas);t=cas;while(t--){if(t!=cas-1) printf("\n");scanf("%d%d",&n,&m);for(int i=0;i<=n;i++)for(int j=0;j<=m;j++)dp[i][j]=0,map[i][j]=0;int x,y,a;getchar();for(int i=1;i<=n;i++){gets(s);int len=strlen(s);for(x=0;x<len;x++){if(s[x]==' '){a=0;for(y=x+1;y<=len;y++){if(s[y]==' '||s[y]=='\0'){map[i][a]=1;break;}else a=a*10+s[y]-'0';}x=y-1;}}}/*for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)printf("%d ",map[i][j]);printf("\n");}*/dp[1][0]=1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(map[i][j]) continue;dp[i][j]=dp[i-1][j]+dp[i][j-1];}printf("%d\n",dp[n][m]);}return 0;}


0 0
原创粉丝点击