技巧总结 New Update : 15.10.28 20:46

一、某动规题目

题意:

一共有n个物品,选定每个物品有得分,并且有m个关系使得选取给定的两种物品有额外得分,选取k个物品使得得分最大。(这m个关系是一个森林)
n<=2000,m<=2000,k<=n


初步解析:

如果我们直接设f[i][j]表示前i个物品里选j个并且选取了i的最大得分。
我们发现有一种情况无法更新。
即如果第i个物品与第i-2个物品有额外得分的话,那么我们只能在选取第i-2个物品时来加上这个额外得分。
但是在第i-1个物品的状态里,可能选取了第i-2个物品,也可能没有选取第i-2个物品,这个时候我们无法记录是否应该加上这个额外得分,并且这种更新是不成立的,因为你当前选取某物品之后是对未来的决策具有影响的。


正确解法

我们注意到上面的解法里并没有用到题里的给定条件,即每个物品至多与两个物品有绑定关系。
显然可以发现这种绑定关系是一条链。
所以我们可以把所有的物品重新排序。
即按照链的顺序排列所有的物品。
(不妨把关系(i,j)看做物品i到物品j的一条边, i<j
这样的话对于某物品i,如果有一个物品连向他,那么连向他的这个物品的新编号一定是i-1。
这样的话,继续套用上述DP方程,f[i][j]表示前i个点选取j个并且选i的最大得分。
那么显然

f[i][j]=max(max(f[k][j1])(k<=i2),f[i1][j1]+map[i1][i])+val[i]

这样的话就完美避免了上述我们无法确定先前的状态是否选取了连向该点的点的情况。


二、某概率证明

题意:

某事件发生每次概率为p,求发生该事件的期望次数。


解析:

根据数学期望公式:

E=k=1nkp(1p)k1

设:
S=Ep=1+2(1p)+3(1p)2+...+n(1p)n11

则:
(1p)S=(1p)+2(1p)2+3(1p)3+...+n(1p)n2

1式减2式有:
pS=1+(1p)+(1p)2+(1p)3+...+(1p)n1n(1p)n

S=1(1p)np2n(1p)np

k
(1p)k0
S1p2
E=pS=1p


三、某脑洞

题意:

Ckn+C2kn+C3kn+C4kn+...+Cnkkn 对P取模的值。


第一阶段:

n<=5000,k<=50,p<=1000000007
直接预处理组合数无脑枚举。


第二阶段:

n<=1000000,k<=50,p<=1000000007
O(n^2)的预处理并不可取。
可以发现这个问题可以递推。
不妨设 F[i][j]=C[i][j]+C[i][j+k]+C[i][j+2k]....
因为我们知道组合数的递推公式 C[i][j]=C[i1][j1]+C[i1][j]
所以可以得出
F[i][j]=(C[i1][j]+C[i1][(j1) % k]+C[i1][j+k]+C[i1][(j1) % k+k]+....)mod p
F[i][j]=(F[i1][j]+F[i1][(j1)% k])mod p
显然直接递推可以O(n*k)复杂度出解。
答案即F[n][0]


第三阶段:

n<=1000000000,k<=50,p<=1000000007
我们显然可以构造出一个转移矩阵来加速这一递推过程。
复杂度 O(lognk3)


以下为口胡


第四阶段:

n<=1000000000,k<=1000,p<=1000000007
由第三阶段我们可以得知该转移矩阵的形式为一个循环矩阵。
所以在矩乘中我们可以少枚举一个行,从而降下 O(k) 的复杂度。
复杂度 O(lognk2)


第五阶段:

n<=1000000000,k<=1000000,p<=1000000007
既然都说是循环矩阵了,所以在矩乘的时候显然就是多项式乘法的形式。
FFT!FFT!
复杂度 O(lognklogk)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值