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;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 ErrorPage! Reason:*Networkbusy*InvalidURL*Failedto install_flash_player_10_active_x 伊织 伊织调教 起重机司机学习 ssni 输入梯形上底下底高,输出面积 python语言,输入梯形上底下底高输出面积 网易产品 https://www.csdndoc.com/blog/390696 https://www.cocoacontrols.com 风之教堂 黄色网站 AV网站 439973416 فیلترشکن WS_CLIPCHILDREN设置键在哪里 数据结构(严蔚敏李冬梅)课后答案 ipz809 一个字包含的二进制位数 linux面试 【题目2】设计一个结构体类型,包含姓名、出生日期。其中出生日期又包含年、月、日三部分信息。输入n个好 【题目2】设计一个结构体类型,包含姓名、出生日期。其中出生日期又包含年、月、日三部分信息。输入n个好 结构体比较好友中年纪最小的 matlab三维矩阵可视化 使QQ崩溃 scanIP 按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50% c语言输入三个数字 c语言如何输入三个数求平均值 c语言如何输入三个数求和 C语言为什么只录入了第一个数字 输入多个数字 c语言scanf只有第一个数字 scanf三个整数 double double类型 www和http 会计 日记账 myamnatfound