摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 失误原因(初次提交分数)
骑士游历 ★☆☆☆☆ 答案正确 100 2014/11/28 20:21:12 边界问题(50)

题意

在n*m的棋盘上,马只能从向右走日字格,求(x1,y1)到(x2,y2)的方案数。

题解

  • 还是很简单的棋盘动态规划了,还是注意边界问题,这题是从1开始的Σ( ° △ °|||)︴
显示/移除行号
  1. dp[x][y]=dp[x][y]+dp[x-1][y-2]+dp[x-1][y+2]+dp[x-2][y-1]+dp[x-2][y+1];
  • 本题需要用64位整数,无需高精度

代码

1219.cpp代码已折叠
展开折叠内容
显示/移除行号
  1. #include<cstdio>
  2. unsigned long long dp[200][200]={};
  3. int n,m,x0,y0,x1,y1;
  4. int main()
  5. {
  6. scanf("%d%d%d%d%d%d",&n,&m,&x0,&y0,&x1,&y1);
  7. dp[x0][y0]=1;
  8. for(int x=0;x<=m;++x)
  9. for(int y=0;y<=n;++y)
  10. {
  11. if(x>=2&&y>=3)
  12. dp[x][y]=dp[x-1][y-2];
  13. if(x>=2)
  14. dp[x][y]+=dp[x-1][y+2];
  15. if(x>=3&&y>=2)
  16. dp[x][y]+=dp[x-2][y-1];
  17. if(x>=3)
  18. dp[x][y]+=dp[x-2][y+1];
  19. }
  20. printf("%llu\n",dp[x1][y1]);
  21. }

著作权声明[编辑]

关于[编辑]