博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeForces 559C Gerald and Gia (格路+容斥+DP)
阅读量:4986 次
发布时间:2019-06-12

本文共 1692 字,大约阅读时间需要 5 分钟。

大致题意:有一个 \(N\times M\) 的网格,其中有些格子是黑色的,现在需要求出从左上角到右下角不经过黑色格子的方案数(模 \(10^9+7\)



\(solution:\)

首先 \(orz\) 鸽王,看一眼就说:“嗯?这不就是一道格路+容斥的小水题吗?”,然后秒切大火题。

这道题主要考验我们如何设置动态规划的状态以保证不重不漏的算好所有情况。上一次我发这类“找基准点”的DP题解应该是 这两道题都要求我们要精确的计算所有情况,我们都需要去构思一种可以囊括所有情况且不会重复的方案。

这一题首先讲一个基本知识:在一个 \(N\times M\) 的网格里,从左上角到右下角的方案数就是: \(C^{N-1}_{N+M-2}\) ,这个可以很好理解:我们从左上角走到右下角总共会走 \(N+M-2\) 步,而我们只需要在这些步数里选择有那几步是向下走的即可。然后我们回来分析题目,这道题我们很难直接算,只能循序渐进,也就是用最优子结构来得出最优答案,而且这是完全没有后效性的。但是如果我们将从左上角到每一个格子的方案都求出来,这道题的数据范围就很不友好。不过我们发现它的黑色格子数目很少,于是我们可以反向思考,我们求出它会走过黑色格子的路径,这样就不会去跑一些没用的状态了。我们将黑色格子按照从左上角到右下角的顺序排序,然后以到每一个黑色格子的路径作为状态。但是这样我们发现会严重重复,所以我们必须想办法不重复。

为了不重复我们要顶一个基准点:就是这条路径到达的第一个黑色格子,我们只需要确定这第一个格子接下来的路随便走都没问题,于是我们要求出左上角到每一个黑色格子的不经过其他节点的路径(这不就是一个子问题吗?)于是问题迎刃而解。因为我们有办法求所有的经过黑色格子的路径进而反向得出不经过任何黑色格子的路径数。



\(code:\)

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define db double#define rg register intusing namespace std;const int mod=1e9+7;int h,w,n;int f[2005];int jc[200015];int inv[200015];struct su{ int x,y; inline bool operator <(su z){ return x!=z.x?x
>=1; }return res;}int main(){ //freopen(".in","r",stdin); //freopen(".out","w",stdout); h=qr(); w=qr(); n=qr(); jc[0]=jc[1]=inv[0]=1; rg tot=h+w+1; for(rg i=2;i<=tot;++i) jc[i]=(ll)jc[i-1]*i%mod; inv[tot]=ksm(jc[tot],mod-2); for(rg i=tot;i>1;--i) inv[i-1]=(ll)inv[i]*i%mod; for(rg i=1;i<=n;++i) a[i].x=qr(),a[i].y=qr(); a[n+1].x=h; a[n+1].y=w; sort(a+1,a+n+2); for(rg i=1;i<=n+1;++i){ f[i]=C(a[i].x+a[i].y-2,a[i].x-1); for(rg j=1;j

转载于:https://www.cnblogs.com/812-xiao-wen/p/11005743.html

你可能感兴趣的文章
HDU 1070 [Milk] 贪心
查看>>
关于 IsLocalUrl 方法的注意事项
查看>>
ln -s 软连接介绍
查看>>
计算到今天多少天--字符集要选GB2312
查看>>
《Python数据分析与挖掘实战》-第四章-数据预处理
查看>>
觉得父母思想过时,有时甚至阻碍到自己,如何有效沟通并说服?
查看>>
P3480 [POI2009]KAM-Pebbles 阶梯NIM
查看>>
STM32之CAN ---CAN ID过滤器分析
查看>>
android studio ndk 调试
查看>>
ylb-ASP.NET技术搭建不错的网站列表
查看>>
数据库实例: STOREBOOK > 用户 > 编辑 用户: PUBLIC
查看>>
tempfile module 临时文件/文件夹
查看>>
程序性能优化
查看>>
模板引擎StringTemplate
查看>>
【共读Primer】3.[1.3]注释简介 Page8
查看>>
Linux虚拟地址空间布局以及进程栈和线程栈总结(转)
查看>>
批量部署ssh信任关系
查看>>
Asp.Net 高性能ORM框架——SqlSugar
查看>>
合并两个 Lambda 表达式
查看>>
dateDiff 用法
查看>>