类型为含有多个禁止位置的路线问题

h行w列矩阵,从左上角出发,只能向右或下走,且有n个禁止位置,求到右下角的路线数
\(1 \leq h, w \leq 10^5, 1 \leq n \leq 2000\)

容斥,对禁止位置排序,考虑到达第i个禁止位置的不经过其他禁止位置的路线,它可以通过容斥,用前i-1个更新。
复杂度\(O(n^2)\)

#include <cstdio>
#include <cstring>
#include <algorithm>
#define MOD 1000000007
using namespace std;
typedef long long LL;int h, w, n;
const int maxn = 2e3 + 10;
const int maxhw = 2e5 + 10;
LL ans[maxn];
int fact[maxhw], inv[maxhw], INV[maxhw];
struct node {int x; int y;
} pn[maxn];bool cmp(const node& A, const node& B) {return A.x == B.x ? A.y < B.y : A.x < B.x;
}void init() {fact[0] = fact[1] = 1;inv[0] = inv[1] = 1;INV[0] = INV[1] = 1;for (int i = 2; i < maxhw; i++) {fact[i] = (LL)fact[i - 1] * i % MOD;inv[i] = (LL)(MOD - MOD / i) * inv[MOD % i] % MOD;INV[i] = (LL)inv[i] * INV[i - 1] % MOD;}
}int main() {init();scanf("%d%d%d", &h, &w, &n);for (int i = 0; i < n; i++) {scanf("%d%d", &pn[i].x, &pn[i].y);}sort(pn, pn + n, cmp);pn[n].x = h; pn[n].y = w; for (int i = 0; i <= n; i++) {int x = pn[i].x; int y = pn[i].y;ans[i] = (LL)fact[x + y - 2] * INV[x - 1] % MOD * INV[y - 1] % MOD;for (int j = 0; j < i; j++) {int nx = pn[j].x, ny = pn[j].y;if (nx > x || ny > y) continue;ans[i] = (ans[i] - ans[j]  * fact[x - nx + y - ny] % MOD * INV[x - nx] % MOD * INV[y - ny] % MOD) % MOD;}}printf("%lld\n", (ans[n] + MOD) % MOD);return 0;
}

转载于:https://www.cnblogs.com/xFANx/p/9532565.html

51Nod-1486 大大走格子相关推荐

  1. 51nod 1486 大大走格子(DP+组合数学)

    枚举不合法点的思想. 把障碍x坐标为第一关键字,y坐标为第二关键字排序.f[i]表示走到第i个障碍的方案数. f[i]=C(x[i]+y[i]-2,x[i]-1)-sigma(f[j]*C(x[i]- ...

  2. 【51NOD】1486 大大走格子

    [算法]动态规划+组合数学 [题意]有一个h行w列的棋盘,定义一些格子为不能走的黑点,现在要求从左上角走到右下角的方案数. [题解] 大概能考虑到离散化黑点后,中间的空格子直接用组合数计算. 然后解决 ...

  3. 【51Nod - 1344】走格子 (思维)

    题干: 有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去.机器人有一个初始能量,每个格子对应一个整数Aii,表示这个格子的能量值.如果Aii > 0, ...

  4. 51nod 1486

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1486 1486 大大走格子 题目来源: CodeForces 基准时间限 ...

  5. 51nod 1344 走格子【贪心/前缀和】

    1344 走格子 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格 ...

  6. 51nod 1118 机器人走方格 解题思路:动态规划 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题

    51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式 ...

  7. NOIP模拟测试14「旋转子段·走格子·柱状图」

    旋转子段 连60分都没想,考试一直肝t3,t2,没想到t1最简单 我一直以为t1很难,看了题解发现也就那样 题解 性质1 一个包含a[i]旋转区间值域范围最多为min(a[i],i)----max(a ...

  8. 【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)上

    篇写上一个思路篇,那么今天我们就来完成这一项工作 源代码和配套文件 链接: https://caiyun.139.com/m/i?135ClY1yWrSKX 提取码:e4pq 复制内容打开中国移动云盘 ...

  9. 1344 走格子 (前缀和)

    有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去.机器人有一个初始能量,每个格子对应一个整数A[i],表示这个格子的能量值.如果A[i] > 0,机器 ...

  10. Wannafly挑战赛17 - 走格子(模拟)

    题目链接 题目描述 在平面上有n*n大小的正方形,定义正方形左下角坐标是(1,1),右下角坐标是(n,1) 现在A君在左下角,他的初始方向是向右,他要在正方形内走m步 当A君碰到边界或者已经走过的格子 ...

最新文章

  1. ashx是什么文件,如何创建
  2. mysql的api框架_API接口幂等性框架设计
  3. 学点 C 语言(19): 数据类型 - 数组
  4. IT行业的日常工作方法 学习(转)
  5. 话里话外:从“种房子”谈流程与制度的差别
  6. 地理模块化施工的优点_模块化建筑适合学校的6个原因
  7. windows 2502 2503 错误解决
  8. 第十节:利用async和await简化异步编程模式的几种写法
  9. html5向上向下兼容插件,Sticky Header-兼容IE8的页面顶部固定jQuery插件
  10. 实验5-9 使用函数输出水仙花数 (20 分)
  11. 微软翻译离线简体中文服务器,想要离线模式下使用翻译软件?微软翻译或可成为新的选择...
  12. PIC单片机应用开发实践教程(四): MPLAB X IDE Debug
  13. 百度离线地图示例之一:地图展示
  14. 编译x86_64老是不过,iphone模拟器debug不了解决方法
  15. perfect forward secrecy
  16. 中国象棋总体设计 中国象棋课设02
  17. Linux ps命令简介
  18. python市场_大交易数据的python市场篮子分析
  19. k近邻算法——kd树
  20. 枫林红叶随身落, 遍地花海迹中寻。 独贪长不愿醒, 回首百年烟云过。

热门文章

  1. kubectl 获取不到node_排查 Node.js 服务内存泄漏,没想到竟是它?
  2. GTJ2018如何导出全部工程量_新清单计量规范征求意见稿第二期来啦!来看看那些让你烦恼的操作如何解决...
  3. java是否存在引用传递_Java永远不会传递引用,对吧?
  4. 大专适合学习php么_中专毕业上大专好还是出来工作?
  5. [OpenStack] OpenStack Essex - Glance api 的实验(curl)
  6. Spring MVC笔记 使用JdbcTemplate
  7. 内存泄露分析 - 收藏集 - 掘金
  8. java.lang.OutOfMemoryError: PermGen space tomcat启动项目出错
  9. 【经验总结】js关闭当前页面/关闭当前窗口(兼容所有浏览器)
  10. Apache Wicket 1.5发布