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 ",dp[n][n]); } }