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]-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+组合数学)相关推荐
- 【51NOD】1486 大大走格子
[算法]动态规划+组合数学 [题意]有一个h行w列的棋盘,定义一些格子为不能走的黑点,现在要求从左上角走到右下角的方案数. [题解] 大概能考虑到离散化黑点后,中间的空格子直接用组合数计算. 然后解决 ...
- 【51Nod - 1344】走格子 (思维)
题干: 有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去.机器人有一个初始能量,每个格子对应一个整数Aii,表示这个格子的能量值.如果Aii > 0, ...
- 51nod 1486
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1486 1486 大大走格子 题目来源: CodeForces 基准时间限 ...
- 51nod 1344 走格子【贪心/前缀和】
1344 走格子 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格 ...
- 51nod 1118 机器人走方格 解题思路:动态规划 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题
51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式 ...
- NOIP模拟测试14「旋转子段·走格子·柱状图」
旋转子段 连60分都没想,考试一直肝t3,t2,没想到t1最简单 我一直以为t1很难,看了题解发现也就那样 题解 性质1 一个包含a[i]旋转区间值域范围最多为min(a[i],i)----max(a ...
- 【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)上
篇写上一个思路篇,那么今天我们就来完成这一项工作 源代码和配套文件 链接: https://caiyun.139.com/m/i?135ClY1yWrSKX 提取码:e4pq 复制内容打开中国移动云盘 ...
- 走格子(数学组合/动态规划)
一个高中就学过的问题:现有一个m * n的网格,从最左上角出发,每次只能向右或者向下移动一格,问有多少种不同的方法可以到达最右下角的格子? 可以用高中学过的排列组合来解,见下图一个6*6的格子,从A走 ...
- 1344 走格子 (前缀和)
有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去.机器人有一个初始能量,每个格子对应一个整数A[i],表示这个格子的能量值.如果A[i] > 0,机器 ...
最新文章
- .Net Discovery 系列之四--深入理解.Net垃圾收集机制(下)
- pyspark dataframe基本用法
- cmake (2)指令说明
- Docker的安装和Redis容器
- Linux管道用法示例
- ANSYS——后处理中单元表(ELEMENT table)的作用、创建、使用
- 给所有想从事软件研发的年轻工程师的忠告与建议
- Delta3d动态角色层
- 优化方法-模式搜索法
- 基于springboot 改造 open-shop小程序商城
- c if sortable html,sortable.js中文文档
- java基础学习(4)
- 基于CNN网络的轴承故障诊断
- 进行海外媒体发稿的稿件撰写技巧和方法
- 计算机操作系统锁定如何解锁,笔记本键盘锁定,小编教你笔记本键盘锁定怎么解锁...
- 微信授权与拒绝授权的弹窗处理
- SQL修改表的基本操作
- ultraedit技巧积累
- pythoot+mysql+基于Python的“书怡”在线书店系统的设计与实现 毕业设计-附源码082332
- 浅析系统性思维——新书《系统思维的艺术》解读(上)