zzulioj 1894: 985的方格难题 [dp]
来源:互联网 发布:js定时器函数 编辑:程序博客网 时间:2024/04/28 04:02
1894: 985的方格难题
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 397 Solved: 87
SubmitStatusWeb Board
Description
985走入了一个n * n的方格地图,他已经知道其中有一个格子是坏的。现在他要从(1, 1)走到(n, n),每次只可以向下或者向右走一步,问他能否到达(n,n)。若不能到达输出-1,反之输出到达(n,n)的方案数。
Input
第一行输入一个整数t,代表有t组测试数据。
每组数据第一行输入三个整数n,x,y,分别代表方格地图的大小以及坏掉格子的位置。
注:1 <= t <= 20,1 <= n <= 30,1 <= x,y <= n。
Output
若可以到达(n,n)则输出方案数对1e9 + 7取余的结果,反之输出-1。
Sample Input
22 1 22 2 2
Sample Output
1-1
一个格子只能由它左边和上边的走到,用第一行和第一列特殊处理一下。
代码:
#include<cstdio> #include<cstring> #define M 1000000007 int main() { int t,n,x,y; long long dp[40][40]; scanf("%d",&t); while(t--) { scanf("%d",&n); memset(dp,-1,sizeof(dp)); scanf("%d%d",&x,&y); if((x==1&&y==1)||(x==n&&y==n)) { printf("-1\n"); continue; } dp[x][y]=0; dp[1][1]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(dp[i][j]==-1) { if(i==1) dp[i][j]=dp[i][j-1]%M; else if(j==1) dp[i][j]=dp[i-1][j]%M; else dp[i][j]=(dp[i-1][j]%M+dp[i][j-1]%M)%M; } } } printf("%lld\n",dp[n][n]); } return 0; }
0 0
- zzuliOJ 1894: 985的方格难题 【dp】
- zzulioj 1894: 985的方格难题 [dp]
- ZZULIOJ-1894-985的方格难题(BFS&规律&DP)
- zzulioj 1894: 985的方格难题
- 【zzulioj 1894 985的方格难题】
- zzuliOJ 1894:985的方格难题(规律)
- ZZULIOJ-1894-985的方格难题(动态规划)
- 【zzuliOJ】1894 - 985的方格难题(组合数学)
- 【多校训练】ZZULIOJ 1894 985的方格难题
- Problem C: 985的方格难题(dp)
- 1894: 985的方格难题
- 1894: 985的方格难题
- 1894: 985的方格难题
- 985的方格难题
- 985的方格难题
- 【zzuli-oj】-985的方格难题(DP)
- 【hpu oj 1015 985的方格难题 [DP、数学] 】
- 【郑轻】[1894]985的方格难题
- n^n的末位数字
- 编外话
- Python的Eclipse+PyDev编程环境搭建(Linux系统)
- libevent_网页介绍
- Android Design Support之CoordinatorLayout实战
- zzulioj 1894: 985的方格难题 [dp]
- java正则表达式 常用
- 经典面试题集合
- final关键字
- poj1797——Heavy Transportation(最大生成树)
- 双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计
- POJ flip Game翻转棋盘
- iOS 从APP跳转至APP的系统设置界面
- 从一个数组里面获取最大的几个数字代码实现