题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1627

基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
 收藏
 关注

有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第n行第m列的格子有几种方案,答案对1000000007取模。

Input
  1. 单组测试数据。
  2. 两个整数n,m2<=n,m<=100000
Output
  1. 一个整数表示答案。
Input示例
  1. 4 5
Output示例
  1. 10

题解:

1.如果去除掉起点和终点,那么就是对中间的矩形进行统计。则首先 n -= 2, m -= 2。

2. 可知里边的矩形最多只能有 min(n,m)个足迹,假设m = min(n,m),即最多只能有m个足迹。

3.根据以上两点,可以枚举矩形里足迹的个数i,然后再为这i个足迹分配横、纵坐标,总共有 C(n,i)*C(m,i)种情况,则最终答案为:∑C(n,i)*C(m,i) , 0<=i<=m 。

代码如下:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <vector>
  6. #include <cmath>
  7. #include <queue>
  8. #include <stack>
  9. #include <map>
  10. #include <string>
  11. #include <set>
  12. using namespace std;
  13. typedef long long LL;
  14. const int INF = 2e9;
  15. const LL LNF = 9e18;
  16. const int MOD = 1e9+;
  17. const int MAXM = 1e5+;
  18. const int MAXN = 2e5+;
  19.  
  20. LL qpow(LL x, LL y)
  21. {
  22. LL s = ;
  23. while(y)
  24. {
  25. if(y&) s = (s*x)%MOD;
  26. x = (x*x)%MOD;
  27. y >>= ;
  28. }
  29. return s;
  30. }
  31.  
  32. LL A[MAXN], inv[MAXN];
  33. LL C(LL n, LL m)
  34. {
  35. if(n<m) return ;
  36. return (((A[n]*inv[n-m])%MOD)*inv[m])%MOD;
  37. }
  38.  
  39. void init()
  40. {
  41. A[] = inv[] = ;
  42. for(int i = ; i<MAXN; i++)
  43. {
  44. A[i] = i*A[i-]%MOD;
  45. inv[i] = qpow(A[i], MOD-);
  46. }
  47. }
  48.  
  49. int main()
  50. {
  51. init();
  52. LL n, m;
  53. while(scanf("%lld%lld",&n,&m)!=EOF)
  54. {
  55. n -= ; m -= ; //去掉起始点和终点,只对里边的矩形进行统计
  56. if(n<m) swap(n,m);
  57. LL ans = ;
  58. for(int i = ; i<=m; i++) //里边的矩形最多只能有min(n,m)个“足迹”,即最多只能走min(n,m)+1步
  59. ans = (ans+C(m,i)*C(n,i)%MOD)%MOD; //如果里边有i个足迹,则为这i个足迹选择横坐标、纵坐标
  60. printf("%lld\n", ans);
  61. }
  62. }

51Nod 1627 瞬间移动 —— 组合数学的更多相关文章

  1. 51nod 1627 瞬间移动(组合数学)

    传送门 解题思路 因为每次横纵坐标至少\(+1\),所以可以枚举走的步数,枚举走的步数\(i\)后剩下的就是把\(n-1\)与\(m-1\)划分成\(i\)个有序正整数相加,所以用隔板法,\(ans= ...

  2. 51 Nod 1627瞬间移动(插板法!)

    1627 瞬间移动  基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右 ...

  3. Problem 2238 Daxia & Wzc's problem 1627 瞬间移动

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1627 http://acm.fzu.edu.cn/problem.php ...

  4. 2016"百度之星" - 初赛(Astar Round2B)1003 瞬间移动 组合数学+逆元

    瞬间移动  Accepts: 1018  Submissions: 3620  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: 65536/ ...

  5. 51nod1627 瞬间移动

    打表可以看出来是组合数...妈呀为什么弄成n+m-4,n-1,m-3就错啊... //打表可以看出来是组合数...妈呀为什么弄成n+m-4,n-1,m-3就错啊... #include<cstd ...

  6. 51Nod 1016 水仙花数 V2(组合数学,枚举打表法)

    1016 水仙花数 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 160         难度:6级算法题                水仙花数是指一个 n 位数 ( n≥3 ) ...

  7. 51nod 1189 算术基本定理/组合数学

    www.51nod.com/onlineJudge/questionCode.html#!problemId=1189 1189 阶乘分数 题目来源: Spoj 基准时间限制:1 秒 空间限制:131 ...

  8. 51nod 1119 机器人走方格 V2 【组合数学】

    挺水的但是我好久没写组合数了- 用这样一个思想,在1~m列中,考虑每一列上升几格,相当于把n-1个苹果放进m个篮子里,可以为空,问有几种方案. 这个就是一个组合数学经典问题了,考虑n个苹果放进m个篮子 ...

  9. 51nod 1253:Kundu and Tree(组合数学)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1253 所有的三元组的可能情况数有ans0=C(n,3).然后 ...

随机推荐

  1. 使用assembly将maven项目pom.xml中的jar包打包

    参考官方网站:http://maven.apache.org/plugins/maven-assembly-plugin/usage.html 方法一:将pom.xml引入的jar包打到zip文件夹中 ...

  2. Maven项目如何将自定义文件添加到META-INF目录下

    Maven项目如何将自定义文件添加到META-INF目录下 学习了:https://blog.csdn.net/yangjiegreat/article/details/78698655 <bu ...

  3. bit、位、byte、字节、B、KB、字符与网速

    一.存储单位bit和Byte 1.bit(比特) bit就是位,也叫比特位,是数据存储的最小单位.简写为小写字母“b” 二进制的一位,每个0或1是一个bit 2.Byte(字节) Byte是字节,也有 ...

  4. 有趣的HTML5/CSS3艺术网站

    http://www.html5tricks.com/ 2017年8月31日08:16:21

  5. linux挂载硬盘

    最近有个生产机由于缓存问题,硬盘不太够用,所以就加载了一块硬盘,下面把挂载硬盘的过程记录下,供大家参考,有问题欢迎留言! fdisk –l ------------------------------ ...

  6. Centos7 安装 Maven 3.5.*

    下载 Apache Maven 访问 Maven官方网站,打开后找到下载链接,如下: 解压 tar zxvf apache-maven-3.5.3-bin.tar.gz 添加环境变量 打开 /etc/ ...

  7. prop()方法和attr()方法以及区别

    prop()方法: prop() 方法设置或返回被选元素的属性和值. 当该方法用于返回属性值时,则返回第一个匹配元素的值. 当该方法用于设置属性值时,则为匹配元素集合设置一个或多个属性/值对. 注意: ...

  8. Key-Value键值存储原理初识(NOSQL)

    NO-Sql数据库:Not Only不仅仅是SQL 定义:非关系型数据库:NoSQL用于超大规模数据的存储.(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据).这些类型的数据存储不需要固 ...

  9. BigDecimal的String类型

    java本身对浮点型的计算会丢失精度,这个一定要注意,必须要用BigDecimal的String类型才能解决精度的问题. BigDecimal一共有四个构造方法: 我们在计算商品价格的时候,一定要用B ...

  10. Struts2学习五----------指定多个配置文件

    © 版权声明:本文为博主原创文章,转载请注明出处 指定多个配置文件 - 在Struts2配置文件中使用include可指定多个配置文件 实例 1.项目结构 2.pom.xml <project ...