有一个h行w列的棋盘,里面有一些格子是不能走的,现在要求从左上角走到右下角的方案数。

Input
单组测试数据。
第一行有三个整数h, w, n(1 ≤ h, w ≤ 10^5, 1 ≤ n ≤ 2000),表示棋盘的行和列,还有不能走的格子的数目。
接下来n行描述格子,第i行有两个整数ri, ci (1 ≤ ri ≤ h, 1 ≤ ci ≤ w),表示格子所在的行和列。
输入保证起点和终点不会有不能走的格子。
Output
输出答案对1000000007取余的结果。
Input示例
3 4 2
2 2
2 3
Output示例
2
————————————————————————————
这道题如果单纯的在图上dp肯定会T嘛 因为n m 都是1e5的级别
那么我们可以考虑每一个不能走的格子 f[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])
至于为什么要这么算呢 我们可以用总的路径减去不合法的路径 而每一条不合法的路径
就是先到一个点然后后面乱走嘛 这样就可以保证不算重了2333
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
const int M=1e6+,mod=1e9+,N=1e5+;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m,p;
struct pos{int x,y;}q[M];
bool cmp(pos a,pos b){return a.x!=b.x?a.x<b.x:a.y<b.y;}
LL w[*N],inv[*N];
LL pmod(LL a,LL b){
LL ans=;
while(b){
if(b&) ans=ans*a%mod;
b>>=; a=a*a%mod;
}
return ans;
}
void prepare(){
int mx=n+m;
w[]=; for(int i=;i<=mx;i++) w[i]=w[i-]*i%mod;
inv[mx]=pmod(w[mx],mod-);
for(int i=mx;i;i--) inv[i-]=inv[i]*i%mod;
}
LL C(int n,int m){return w[n]*inv[m]%mod*inv[n-m]%mod;}
LL f[M],ans;
int main(){
//freopen("gg.cpp","r",stdin);
n=read(); m=read();
p=read(); prepare();
for(int i=;i<=p;i++) q[i].x=read(),q[i].y=read();
std::sort(q+,q++p,cmp);
for(int i=;i<=p;i++){
f[i]=C(q[i].x+q[i].y-,q[i].x-);
for(int j=;j<i;j++)
f[i]=(f[i]-f[j]*C(q[i].x-q[j].x+q[i].y-q[j].y,q[i].x-q[j].x)%mod+mod)%mod;
}
ans=C(n+m-,n-);
for(int i=;i<=p;i++) ans=(ans-f[i]*C(n-q[i].x+m-q[i].y,n-q[i].x)%mod+mod)%mod;
printf("%lld\n",(ans+mod)%mod);
return ;
}
 

最新文章

  1. 查看 SHA1
  2. 02-C#入门(枚举、结构等)
  3. 颜色空间变换(RGB-HSV)
  4. elixir 高可用系列(四) Task
  5. (八)play之yabe项目【身份验证】
  6. RGB
  7. 只要项目是maven构建的,pom.xml中依赖的jar包全都默认去你电脑本地仓库去找
  8. HDU 2095 find your present (2)
  9. java新手笔记20 抽象类模板(letter)
  10. PullToRefresh的使用
  11. Cpu实验
  12. Spring设计模式_策略模式/其他
  13. Sum It Up---(DFS)
  14. 通配符的匹配很全面, 但无法找到元素 &#39;xxxxxxxx&#39;
  15. 小程序 lazy-load 不生效的问题
  16. ssh-免密登录批量发送脚本
  17. WCF数据传输安全--数字证书
  18. 一款基于jquery ui漂亮的可拖动div实例
  19. [典型漏洞分享]YS VTM模块存在格式化字符串漏洞,可导致VTM进程异常退出【高危】
  20. 【IMOOC学习笔记】多种多样的App主界面Tab实现方法(一)

热门文章

  1. JAVA单态设计模式
  2. TCP系列17—重传—7、SACK下的重传
  3. HDU 2068 Choose the best route
  4. ServiceMessage
  5. 【Docker 命令】- run命令
  6. C#下Label的多行显示
  7. 抽象类 C#
  8. 2018 杭电多校3 - M.Walking Plan
  9. CF997B Roman Digits
  10. hadoop 把mapreduce任务从本地提交到hadoop集群上运行