2017.08.06【NOIP提高组】模拟赛B组

T1:暴力dg(反着枚举),再加一个小小的剪枝:先维护一个前缀和,每次dg时判断一下若当前的重量加上剩下的所有重量还小于等于以求出的最大重量,那么就不往下搜了。


T2:分层SPFA。


总结:在做分层SPFA时,dis,bz,d这三个数组的形式一定要一模一样,否则会出现错误或超时。


T3:设n>=m,那么最优解一定是先走长度为n这条边,再走长度为m的这条边。

长度为n的这条边上的点的权值一定为1,这个很好求。关键是怎样求长度为m的这条边的答案。

长度为m的这条边的答案就是sum(f[n+1][i])(1<=i<=m+1),这就相当于从(1,1)走到(n+2,m+1)的方案数-1,而从(1,1)走到(n+2,m+1)的方案数为C(m,n+m+1)(一共要横着走m步,竖着走n+1步),结合上长度为n的这条边的答案,那么最终答案就是n+C(m,n+m+1),那么怎样求C(m,n+m+1)呢?

因为答案很大,我们又不能边除边模,所以我们考虑逆元思想。

因为1000000007是一个质数,所以根据费马小定理,就有(a^(p-1))%p=1

即(a^(p-2))%p=(1/a)%p

所以我们如果要求一个数除以a的商模p的结果,也就是求那个数乘a^(p-2)模p的结果,这个我们可以用快速幂解决。


总结:

1、要记住逆元的求法。

2、组合数有一个公式:C(m-1,n)+C(m,n)=C(m+1,n+1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值