题目大意:
  有一个$n\times m(n,m\leq 10^9)$的网格图,从一个点可以到下一行中列数比它大的点。有$k(k\leq 2000)$个点是不能走的,问从第$1$行到第$n$行共有几种方案。

思路:
  动态规划求出以点$i$为终点的方案数,直接$O(nm)$推显然会超时,因此我们$O(k)$可以对于每个障碍点求出组合数。组合数可以用Lucas定理求。
  Lucas定理:$\binom{n}{m}\mod p=\binom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{m}{p}\rfloor}\binom{n\mod p}{m\mod p}\mod p$。

 #include<cstdio>
#include<cctype>
#include<vector>
#include<algorithm>
typedef long long int64;
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int mod=,K=;
int fact[mod],factinv[mod],f[K];
std::pair<int,int> v[K];
void exgcd(const int &a,const int &b,int &x,int &y) {
if(!b) {
x=;
y=;
return;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
inline int inv(const int &x) {
int ret,tmp;
exgcd(x,mod,ret,tmp);
return (ret%mod+mod)%mod;
}
int lucas(const int &n,const int &m) {
if(n<m) return ;
if(n<mod&&m<mod) return (int64)fact[n]*factinv[m]%mod*factinv[n-m]%mod;
return (int64)lucas(n/mod,m/mod)*lucas(n%mod,m%mod)%mod;
}
int main() {
fact[]=;
for(register int i=;i<mod;i++) {
fact[i]=(int64)fact[i-]*i%mod;
}
factinv[mod-]=inv(fact[mod-]);
for(register int i=mod-;~i;i--) {
factinv[i]=(int64)factinv[i+]*(i+)%mod;
}
const int n=getint(),m=getint(),k=getint();
for(register int i=;i<k;i++) {
const int x=getint(),y=getint();
v[i]=std::make_pair(x,y);
}
std::sort(&v[],&v[k]);
v[k]=std::make_pair(n+,m+);
for(register int i=;i<=k;i++) {
f[i]=lucas(v[i].second-,v[i].first-);
for(register int j=;j<i;j++) {
if(v[i].first<=v[j].first||v[i].second<=v[j].second) continue;
f[i]=((f[i]-(int64)f[j]*lucas(v[i].second-v[j].second-,v[i].first-v[j].first-))%mod+mod)%mod;
}
}
printf("%d\n",f[k]);
return ;
}

最新文章

  1. PHP之封装一些常用的工具类函数
  2. zookeeper安装
  3. C# 将数字时间转化为特定格式字符串
  4. C++多线程2
  5. JQuery 插件之Ajax Autocomplete(ajax自动完成)搜索引擎自动显示下拉框
  6. 【转】解决jsp参数传递乱码的问题
  7. jsp回车键登录代码
  8. Debug.print的用法
  9. webpack减少打包后文件体积的几种方法
  10. 在html中嵌入markdown
  11. try catch 学习记入
  12. TCP/IP笔记 三.运输层(4)——TCP链接管理与TCP状态机
  13. 深入理解Java 虚拟机阅读笔记(一)
  14. 从二进制数据流中构造GDAL可以读取的图像数据
  15. HDU4460
  16. 1分钟完美安装最新CentOS+Nginx+PHP-FPM+MySQL
  17. ASP.NET MVC下实现前端视图页的Session
  18. 菜鸟调错(三)——Jboss与jdk版本不兼容导致WebService调用出错
  19. Maven是什么?
  20. Java常用数据结构之Set之TreeSet

热门文章

  1. CandyCrush 糖果传奇
  2. 立体匹配之Census Transform
  3. Android 启动项 Activity
  4. Struts2+DAO层实现实例03——添加监听器跟踪用户行为
  5. nf_register_hooks解读
  6. 【bzoj2079】[Poi2010]Guilds 构造结论题
  7. [poj] 3907 Build Your Home || 求多边形面积
  8. POJ 2186 受欢迎的牛 Tarjan基础题
  9. Android横竖屏切换生命周期
  10. python和shell对比