传送门

代码极短

\(O(n^2)\)dp是设\(f_{i,j,k}\)表示前\(i\)位,放了\(j\)个1,后面还可以接着放\(k\)个0的方案,转移的话,如果放0,\(k\)就要减1,反之放了1,后面可以多放一个0,所以\(k\)加1,即$$f_{i+1,j,k-1}+=f_{i,j,k}$$$$f_{i+1,j+1,k+1}+=f_{i,j,k}$$

这样子还是不好优化,,,

我们可以把问题抽象化,把这个放字符过程转化为从平面直角坐标系的\((0,0)\)走到\((n,m)\),其中放1相当于横坐标+1,放0相当于纵坐标+1,因为要求任何一个前缀中1个数大于等于0个数,也就是走的过程中不能经过\((x,x+1)\),也就是不能碰到直线\(y=x+1\).这是个经典问题,答案为\(\binom{n+m}{m}-\binom{n+m}{m-1}\).至于为什么,这里有一道类似的

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define LL long long
#define il inline
#define re register
#define db double
#define eps (1e-5) using namespace std;
const int N=1000000+10,mod=20100403;
il LL rd()
{
re LL x=0,w=1;re char ch;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
LL n,m,jc[N<<1];
il LL ksm(LL a,LL b)
{
LL an=1;
while(b)
{
if(b&1) an=(an*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return an;
} int main()
{
n=rd(),m=rd();
jc[0]=1;
for(int i=1;i<=n+m;i++) jc[i]=(jc[i-1]*i)%mod;
printf("%lld\n",((jc[n+m]*ksm(jc[n],mod-2)%mod*ksm(jc[m],mod-2)%mod-jc[n+m]*ksm(jc[n+1],mod-2)%mod*ksm(jc[m-1],mod-2)%mod)%mod+mod)%mod);
return 0;
}

最新文章

  1. vsftp简单学习思考
  2. No zuo no die:DDD 应对具体业务场景,Domain Model 重新设计
  3. Walkway.js – 用线条制作简约的 SVG 动画
  4. iOS开发之百度地图的集成——地图标注&amp;POI检索
  5. 自动生成pdf书签(仅适用于Adobe Acrobat on windows )
  6. getpid 与 gettid 与 pthread_self
  7. Find Minimum in Rotated Sorted Array leetcode
  8. address
  9. Asianux3配置yum
  10. HeaderTemplate
  11. OC的单例模式的实现
  12. linux独有的sendfile系统调用--“零拷贝,高效”
  13. docker run 之后执行多条命令
  14. 3.基于梯度的攻击——PGD
  15. android模拟器访问PC本地接口
  16. 《2018面向对象程序设计(Java)课程学习进度条》
  17. 【Dubbo 源码解析】04_Dubbo 服务注册&amp;暴露
  18. html5降龙十八掌-函数,对象,数组的练习
  19. OSX 10.13 以后实现终端FTP命令(转)
  20. TNS

热门文章

  1. BZOJ3862Little Devil I——树链剖分+线段树
  2. Sightseeing tour HDU - 1956(混合欧拉回路)
  3. 【dp专题】NOIP真题-DP专题练习
  4. sklearn 的train_test_split
  5. AtCoder Regular Contest 067 F - Yakiniku Restaurants
  6. 两场CF
  7. 洛谷P2680 运输计划
  8. A1101. Quick Sort
  9. 第一次使用Android Studio时你应该知道的一切配置(一)
  10. Struts2的安装