枚举不合法点的思想。

  把障碍x坐标为第一关键字,y坐标为第二关键字排序。f[i]表示走到第i个障碍的方案数。

  f[i]=C(x[i]+y[i]-2,x[i]-1)-sigma(f[j]*C(x[i]-x[j]+y[i]-y[j],x[i]-x[j]));

  然后把终点当成障碍加进去,f[n]为答案。

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#define MOD(x) x>=mod?x-mod:x
using namespace std;
const int maxn=500010,mod=1e9+7;
struct poi{int x,y;}a[maxn];
int h,w,n;
int fac[maxn],f[maxn],inv[maxn];
void read(int &k)
{int f=1;k=0;char c=getchar();while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();while(c<='9'&&c>='0')k=k*10+c-'0',c=getchar();k*=f;
}
bool cmp(poi a,poi b){return a.x==b.x?a.y<b.y:a.x<b.x;}
int power(int a,int b)
{int t=1;for(;b;a=1ll*a*a%mod,b>>=1)if(b&1)t=1ll*t*a%mod;return t;
}
int C(int n,int m){return 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;}
int main()
{read(h);read(w);read(n);for(int i=1;i<=n;i++)read(a[i].x),read(a[i].y);a[++n].x=h;a[n].y=w;sort(a+1,a+1+n,cmp);fac[0]=inv[0]=1;for(int i=1;i<=h+w;i++)fac[i]=1ll*fac[i-1]*i%mod;for(int i=1;i<=h+w;i++)inv[i]=power(fac[i],mod-2);for(int i=1;i<=n;i++){f[i]=C(a[i].x+a[i].y-2,a[i].x-1);for(int j=1;j<i;j++)if(a[j].x<=a[i].x&&a[j].y<=a[i].y)f[i]=MOD(1ll*f[i]-1ll*f[j]*C(a[i].x-a[j].x+a[i].y-a[j].y,a[i].x-a[j].x)%mod+mod);}printf("%d\n",f[n]);
}

View Code

转载于:https://www.cnblogs.com/Sakits/p/7570215.html

51nod 1486 大大走格子(DP+组合数学)相关推荐

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

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

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

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

  3. 51nod 1486

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

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

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

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

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

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

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

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

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

  8. 走格子(数学组合/动态规划)

    一个高中就学过的问题:现有一个m * n的网格,从最左上角出发,每次只能向右或者向下移动一格,问有多少种不同的方法可以到达最右下角的格子? 可以用高中学过的排列组合来解,见下图一个6*6的格子,从A走 ...

  9. 1344 走格子 (前缀和)

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

最新文章

  1. .Net Discovery 系列之四--深入理解.Net垃圾收集机制(下)
  2. pyspark dataframe基本用法
  3. cmake (2)指令说明
  4. Docker的安装和Redis容器
  5. Linux管道用法示例
  6. ANSYS——后处理中单元表(ELEMENT table)的作用、创建、使用
  7. 给所有想从事软件研发的年轻工程师的忠告与建议
  8. Delta3d动态角色层
  9. 优化方法-模式搜索法
  10. 基于springboot 改造 open-shop小程序商城
  11. c if sortable html,sortable.js中文文档
  12. java基础学习(4)
  13. 基于CNN网络的轴承故障诊断
  14. 进行海外媒体发稿的稿件撰写技巧和方法
  15. 计算机操作系统锁定如何解锁,笔记本键盘锁定,小编教你笔记本键盘锁定怎么解锁...
  16. 微信授权与拒绝授权的弹窗处理
  17. SQL修改表的基本操作
  18. ultraedit技巧积累
  19. pythoot+mysql+基于Python的“书怡”在线书店系统的设计与实现 毕业设计-附源码082332
  20. 浅析系统性思维——新书《系统思维的艺术》解读(上)

热门文章

  1. 仅1年GitHub Star数翻倍,Flink 做了什么?
  2. html删除一行增加一行,html怎么增加一行
  3. 认识代码编辑区域与解决方案区域 005
  4. 谈谈战双的战斗机制设计趋同
  5. JavaWeb课程复习资料(六)——DAO与DAOImpl层封装
  6. preg_match_all用法
  7. SDN 作业提示器(持续更新)
  8. Java扑克牌(斗地主发牌)
  9. 慢查询日志中出现超大时间的案例分析
  10. [教程]发一个iPhone收发邮件设置(163、126邮箱)