试题来源

NOIP1997 普及组

问题描述

设有一个N*M(l≤ N≤50, l≤ M≤ 50)的街道。n和m表示横竖街道数。
规定行人从A(1,1)出发,在街道上只能向东或北方向行走。
N=3,M=3的街道图,从A出发到达B共有6条可供行走的路。
若在N*M的街道中,设置一个矩形障碍区域(包括围住该区域的街道和点)不让行人通行。
此矩形障碍区域用2对顶点坐标给出,前图中的2对顶点坐标为:(2,2),(8,4),此时从 A出发到达B的路径仅有两条。

程序要求:

任务一:给出N,M后,求出所有从A出发到达B的路径的条数。

任务二:给出N,M,同时再给出此街道中的矩形障碍区域的2对顶点坐标(X1,y1), (X2,Y2),然后求出此种情况下所有从A出发到达B的路径的条数。
如果答案太大,输出最后20位。

输入格式

第一行两个数n和m。
第二行为X1,Y1,X2,Y2.如果是任务一,则第二行为4个0.

输出格式

输出走路方案数。

样例输入

3 3
0 0 0 0

样例输出

6

样例输入

50 50
2 2 49 49
样例输出
2

数据规模和约定

1<=N,M<=50
#include<cstdio>
#include<algorithm>
#define maxn 60
#define l 10000000000
using namespace std;
struct number{long long d1,d2; //存储方案的后20位
}f[maxn][maxn];
int n,m;
int flag[maxn][maxn]; //障碍标记
void start(){long long s; f[1][1].d1=1;f[1][1].d2=0;for(int k=3;k<=m+n;k++)for(int i=1;i<=n;i++){if(k-i>=1&&k-i<=m&&!flag[i][k-i]){int j=k-i;if(j-1>=1) f[i][j]=f[i][j-1]; //将前一项给后一项赋值 if(i-1>=1){ //将前一项的值相加 s=f[i][j].d1+f[i-1][j].d1;f[i][j].d1=s%l;f[i][j].d2=(f[i-1][j].d2+f[i][j].d2+s/l)%l;}}}if(f[n][m].d2==0) printf("%I64d\n",f[n][m].d1);else printf("%I64d%010I64d\n",f[n][m].d2,f[n][m].d1); //对前十位不足的用0填充
}
int main(){int x1,x2,y1,y2;scanf("%d%d",&n,&m);scanf("%d%d%d%d",&x1,&y1,&x2,&y2);if(x1>x2) swap(x1,x2); //对障碍的 起始点进行转换 if(y1>y2) swap(y1,y2);for(int i=x1;i<=x2;i++)for(int j=y1;j<=y2;j++)flag[i][j]=1; //对障碍进行标记 start();return 0;
}

表示智商太低,看了好久才看懂。

将方法种数的前十位和后十位分别用d1,d2存起来,这样就不要用高精度了。

初始在(1,1)的位置,然后第一步走出的位置可以为:(1,2)、(2,1),其坐标之和为3
以此类推,第二步到达的点坐标之和为4,第三步到达的点坐标之和为5。
f[i][j]表示从起点到达(i,j)的方案数,则有:f[i][j]=f[i-1][j]+f[i][j-1];
flag[i][j]表示(i,j)点能否通过。
于是得到递推式:
for(k=3;k<=n+m;k++)
for(i=1;i<=n;i++)
{
j=k-i;
f[i][j]=f[i-1][j]+f[i][j-1];
}
当然,还要保证上述的点都是有效的,能通过的。
这是参考的原文链接noip1997街道

清橙网A1110. 街道相关推荐

  1. 清橙A1210. 光棱坦克

    问题描述 一个平面直角坐标系上,有N个点,标号为1到N,其中第i个点的坐标为(x[i], y[i]). 求满足以下两个条件的点列{p[i]}的数目(假设{p[i]}的长度为M): 1) 对任意1 &l ...

  2. 清橙OJ A1095 回溯之教室排课

    题目地址:http://www.tsinsen.com/ViewGProblem.page?gpid=A1095 //清橙OJ A1095 回溯之教室排课 //http://www.tsinsen.c ...

  3. [bzoj 2038 OR 清橙A1206 小Z的袜子]莫队算法

    [bzoj 2038 OR 清橙A1206 小Z的袜子]莫队算法 题意描述:[清橙A1206 时限:1s] [bzoj 2038 时限:20s] 题意描述: 作为一个生活散漫的人,小Z每天早上都要耗费 ...

  4. 【清橙 A1206】小Z的袜子(莫队算法)

    [清橙 A1206]小Z的袜子(莫队算法) A1206. 小Z的袜子 时间限制:1.0s   内存限制:512.0MB   总提交次数:1144   AC次数:319   平均分:43.15 将本题分 ...

  5. 清橙OJ A1046 加法器

    题目链接:http://www.tsinsen.com/A1046 //清橙OJ A1046 加法器 //http://www.tsinsen.com/A1046 #include <stdio ...

  6. 清橙OJ A1035 素数之和

    题目地址:http://www.tsinsen.com/A1035 //清橙OJ A1035 素数之和 //http://www.tsinsen.com/A1035 //复习一下那个标记素数的过程. ...

  7. 清橙OJ A1036.分解质因数

    题目地址:http://www.tsinsen.com/ViewGProblem.page?gpid=A1036 //清橙OJ A1036.分解质因数 //http://www.tsinsen.com ...

  8. 湘橙网超值积分兑换  让消费更过瘾

    曾几何时, 积分兑换就像一个潘多拉魔盒, 带给了消费者无尽的期盼和欣喜. 但是, 随着积分兑换发展 , 积分兑换营销也遭遇了前所未有的尴尬. 尤其表现在信用卡.移动通信运营.电商等领域 高积分低价值的 ...

  9. 给大家分享几个不错的高清壁纸网

    正文: 很多朋友都在找壁纸,但是又不知道去哪里找,所有今天我给大家分享几个不错的壁纸站,当然不仅限于下面的这些壁纸站,其实壁纸站有非常得多,我只是随便给大家整理了几个. 1.极简壁纸: 网站地址:bz ...

最新文章

  1. mysql如何插入新的字段_Mysql 如何 得到新插入的字段ID
  2. 全景图拍摄_全景效果图制作软件如何选择?全景图拍摄有哪些步骤?
  3. URLEncode编码和URLDecode解码
  4. 如何在.NET Core中为gRPC服务设计消息文件(Proto)
  5. Handler(2)
  6. Kubernetes Client-go Informer 源码分析
  7. Docker下redis的主从配置
  8. linux tomcat reload,linux-tomcat安装配置
  9. python-excel写入代码1
  10. mysql relay log参数汇总
  11. java游戏走到边缘_java-3D对象相遇的边缘和毛刺不均匀
  12. SPSS 检验后显著性识别
  13. php实现文件下载的几种方式
  14. easyUI easyui-datagrid (良好习惯:onClickRow,onSelect 都写上,事件同步)
  15. 【Java基础系列】基本数据类型及包装类
  16. 地盘划分 ——朴素递归算法与优化版
  17. 计算机毕业设计SSMjava高校社团管理系统【附源码数据库】
  18. 浅谈网络劫持的原理及影响
  19. watchdog库使用
  20. 论文参考文献格式详细国家标准

热门文章

  1. 2022年mvnrepository跳过人机验证
  2. hbuilder创建app并利用真机运行调试
  3. 线性回归模型度量参数2- Multiple R R-Squared adjusted R-squared
  4. mobile safari下 overflow:auto无效的解决方法
  5. European software vendors ranking 2012 (zz)
  6. 【腾讯TMQ】我们在外包资源池化管理走过的弯路
  7. Java英语单词(5000个)
  8. IntelliJ IDEA 简体中文字体
  9. 学 C 语言,最经典的书有这样几本
  10. 甲骨文称将出示李艾科犯罪证据 与惠普较劲