题意及思路:https://www.cnblogs.com/chaoswr/p/9460378.html

代码:

  1. #include <bits/stdc++.h>
  2. #define LL long long
  3. using namespace std;
  4. const int maxn = 3010;
  5. const LL mod = 1000000007;
  6. LL dp[maxn][maxn];
  7. char s[maxn][maxn];
  8. int n, m;
  9. LL ans[4];
  10. void solve(int sx, int sy, LL ans[]) {
  11. if(s[sx][sy] == '#') return;
  12. memset(dp, 0, sizeof(dp));
  13. dp[sx][sy] = 1;
  14. for (int i = 1; i <= n; i++)
  15. for (int j = 1; j <= m; j++) {
  16. if(s[i][j] == '#') continue;
  17. if(s[i + 1][j] != '#' && i < n) dp[i + 1][j] = (dp[i + 1][j] + dp[i][j]) % mod;
  18. if(s[i][j + 1] != '#' && j < m) dp[i][j + 1] = (dp[i][j + 1] + dp[i][j]) % mod;
  19. }
  20. ans[0] = dp[n - 1][m], ans[1] = dp[n][m - 1];
  21. }
  22. int main() {
  23. scanf("%d%d", &n, &m);
  24. for (int i = 1; i <= n; i++)
  25. scanf("%s", s[i] + 1);
  26. solve(1, 2, ans);
  27. solve(2, 1, &ans[2]);
  28. printf("%lld\n", (ans[0] * ans[3] % mod - ans[1] * ans[2] % mod + mod) % mod);
  29. }

  

Codeforces 348D DP + LGV定理的更多相关文章

  1. Codeforces 348D Turtles LGV

    Turtles 利用LGV转换成求行列式值. #include<bits/stdc++.h> #define LL long long #define fi first #define s ...

  2. CodeForces 348D Turtles(LGV定理)题解

    题意:两只乌龟从1 1走到n m,只能走没有'#'的位置,问你两只乌龟走的时候不见面的路径走法有几种 思路:LGV定理模板.但是定理中只能从n个不同起点走向n个不同终点,那么需要转化.显然必有一只从1 ...

  3. LGV定理 (CodeForces 348 D Turtles)/(牛客暑期多校第一场A Monotonic Matrix)

    又是一个看起来神奇无比的东东,证明是不可能证明的,这辈子不可能看懂的,知道怎么用就行了,具体看wikihttps://en.wikipedia.org/wiki/Lindstr%C3%B6m%E2%8 ...

  4. codeforces 348D Turtles

    codeforces 348D Turtles 题意 题解 代码 #include<bits/stdc++.h> using namespace std; #define fi first ...

  5. LGV定理

    LGV定理用于解决路径不相交问题. 定理 有 \(n\) 个起点 \(1, 2, 3, ..., n\),它们 分别对应 要到 \(n\) 个终点 \(A, B, C, ..., X\),并且要求路径 ...

  6. 【bzoj2111】[ZJOI2010]Perm 排列计数 dp+Lucas定理

    题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Mogic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Mogic的,答案可能很 ...

  7. HDU 5852 Intersection is not allowed! ( 2016多校9、不相交路径的方案、LGV定理、行列式计算 )

    题目链接 题意 : 给定方格中第一行的各个起点.再给定最后一行与起点相对应的终点.问你从这些起点出发到各自的终点.不相交的路径有多少条.移动方向只能向下或向右 分析 : 首先对于多起点和多终点的不相交 ...

  8. Codeforces.348D.Turtles(容斥 LGV定理 DP)

    题目链接 \(Description\) 给定\(n*m\)的网格,有些格子不能走.求有多少种从\((1,1)\)走到\((n,m)\)的两条不相交路径. \(n,m\leq 3000\). \(So ...

  9. CodeForces - 348D:Turtles(LGV定理)

    题意:给定N*M的矩阵,'*'表示可以通过,'#'表示不能通过,现在要找两条路径从[1,1]到[N,M]去,使得除了起点终点,没有交点. 思路:没有思路,就是裸题.  Lindström–Gessel ...

随机推荐

  1. jQuery封装轮播图插件

    // 布局要求,必须有一个容器,图片和两个按钮,布局方式自定,小圆点样式固定 // <div class="all"> // <img src="img ...

  2. ThinkPhp学习

    页面跳转     界面跳转是很常用的操作,所以基于ubuntu16系统,这周学习了ThinkPHP页面跳转和重定向.   页面跳转 系统的Think\Controller类内置了两个页面跳转方法err ...

  3. 作业(二)—python实现wc命令

    Gitee地址:https://gitee.com/c1e4r/word-count(为什么老师不让我们用github) 0x00 前言 好久没发博客了,感觉自己的学习是有点偷懒了.这篇博客也是应专业 ...

  4. Redis的常用命令及数据类型

    Redis支持的五种数据类型 字符串 (string) 字符串列表 (list) 散列 (hash) 字符串集合 (set) 有序字符串集合 (sorted-set) key(键) keys * 获取 ...

  5. Linux下创建动态库与使用

    参考文章:dll和so文件区别与构成:http://www.cnblogs.com/likwo/archive/2012/05/09/2492225.html 动态库路径配置- /etc/ld.so. ...

  6. proxy-target-class="false"与proxy-target-class="true"区别

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11484063.html <aop:aspectj-autoproxy proxy-target- ...

  7. SCP-bzoj-1057

    项目编号:bzoj-1057 项目等级:Safe 项目描述: 戳这里 特殊收容措施: 首先枚举最左上角的点(记为(1,1))是黑点还是白点,这样就可以把与(1,1)不在同一对角线系的格点颜色翻转(形式 ...

  8. Network基础(四):MAC地址表及邻居信息查看、配置接口速率及双工模式、配置交换机管理IP

    一.MAC地址表及邻居信息查看 目标: 本例要求为修改计算机名并加入工作组: 查看交换机MAC地址表 查看CISCO设备邻居信息 方案: 网络拓扑,如下图所示. 步骤: 步骤一:查看交换机sw1的ma ...

  9. 调用windows的复制文件对话框

    function CopyFileDir(sDirName: String; sToDirName: String): Boolean; var fo: TSHFILEOPSTRUCT; begin ...

  10. Git GUI使用方法【转】

    前言 之前一直想一篇这样的东西,因为最初接触时,我也认真看了廖雪峰的教程,但是似乎我觉得讲得有点多,而且还是会给我带来很多多余且重复的操作负担,所以我希望能压缩一下它在我工作中的成本,但是搜索了一下并 ...