luogu P1176 路径计数2
来源:互联网 发布:轻云4g网络下怎么用 编辑:程序博客网 时间:2024/05/20 14:19
题目描述
一个N×N的网格,你一开始在(1, 1),即左上角。每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N, N),即右下角有多少种方法。
但是这个问题太简单了,所以现在有M个格子上有障碍,即不能走到这M个格子上。
输入输出格式
输入格式:
输入文件第1行包含两个非负整数N,M,表示了网格的边长与障碍数。
接下来M行,每行两个不大于N的正整数x, y。表示坐标(x, y)上有障碍不能通过,且有1≤x, y≤n,且x, y至少有一个大于1,并请注意障碍坐标有可能相同。
输出格式:
输出文件仅包含一个非负整数,为答案mod 100003后的结果。
输入输出样例
输入样例#1:
3 1
3 1
输出样例#1:
5
说明
对于20%的数据,有N≤3;
对于40%的数据,有N≤100;
对于40%的数据,有M=0;
对于100%的数据,有N≤1000,M≤100000。
一道动态规划题。
假设从(1,1)到(n,n)的方法数为dp[n][n],又因为每次只能移动到下方相邻的格子或者右方相邻的格子,那么容易得到状态转移方程dp[n][n]=dp[n-1][n]+dp[n][n-1];
然后其中要注意的点就是存在障碍,解决方法是用另一个同样大小的二位数组sign[n][n]记录障碍坐标。
下面贴上代码:
#include <cstring>#include <cstdio>using namespace std;int dp[1005][1005];int sign[1005][1005]; const int mod=100003;//书上比较推荐这样的宏定义 int main(void){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { memset(dp,0,sizeof(dp)); memset(sign,0,sizeof(sign));//清零 dp[0][1]=1; int x,y; for(int i=0;i<m;i++) { scanf("%d%d",&x,&y); sign[x][y]=1;//标记障碍坐标 } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { dp[i][j]=(dp[i-1][j]+dp[i][j-1])%mod;//在循环里求余可防止中间数据溢出 if(sign[i][j]==1) dp[i][j]=0;//如果此处有障碍,不能到达终点,方法数不计入,则归零。 } } printf("%d\n",dp[n][n]);//即到达(n,n)的方法数 } return 0;}
阅读全文
0 0
- luogu P1176 路径计数2
- P1176 路径计数2
- 【递推】洛谷 P1176 路径计数2
- luogu P2518 [HAOI2010]计数
- 【u105】路径计数2
- 路径计数
- Luogu 1169 棋盘制作:计数问题
- Luogu P2240 数的计数数据加强版
- ACdream P1176 ACM
- 【51Nod 1610】路径计数
- 51nod 1610 路径计数
- 51Nod-1610-路径计数
- 51nod 1610 路径计数
- POJ1787 【完全背包+物品计数+路径输出】
- 路径统计(最短路计数)
- Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall
- Luogu 1197
- 【Luogu】 食物链
- UNITY游戏开发源码
- 我要开始学习Android
- SVN同步代码库
- Mahout实战之基本概念
- 【学习C++】 二维数组和指针
- luogu P1176 路径计数2
- java读取各类型的文件
- 一文概览ICLR 2018最新评审论文TOP 5(附论文地址)
- 使用Jmeter进行性能测试的基本操作方法
- Mahout实战之相似性度量
- 简单题之列表转换
- MongoDB安装教程及错误代码100解决办法
- 报名 | 智能制造:困惑中前行讲座
- Java基础之静态修饰符知识点总结