Codeforces Round #695 (Div. 2)D. Sum of Paths【计数题】

题目链接___

复健复健!考完试了,我的力量都回到我这里来吧!
题意:
给定n个长度小格子,每步可以走到-1或+1下标,不能越界。
走k步产生一个序列: c 0 , c 1 , c 2 … … c k c_0,c_1,c_2……c_k c0,c1,c2ck对应 A c 0 + A c 1 + A c 2 . . . . . A_{c0}+A_{c1}+A_{c2}..... Ac0+Ac1+Ac2.....
求所有这样序列总和。即:路径下标权值和为路径权值,求所有路径权值和

本题难以从逐个递推角度求解。我设了一些函数都难以处理这个状态的转移。最后设了一个: f ( i , j ) f( i, j ) f(i,j)表示:从下标i出发走j步的不同路径方案数;
然后发现一个问题:起点终点是完全可逆的,也就是说这个函数可以理解为:从不同地方走到下标i位置的不同路径方案数。于是乎:
i被踩了多少次? 等于任何地方路过i的次数设g 表示从不同地方走到下标i的不同路径方案数,有f(i,g)方案数,剩下的k-g步,如何消耗,仍采用f(i,k-g),于是:
c n t i = ∑ j = 0 k f ( i , j ) ∗ f ( i , k − j ) cnt_i = \sum_{j=0}^{k}f(i,j)*f(i,k-j) cnti=j=0kf(i,j)f(i,kj)
表示下标i 访问次数。整体时间复杂度为nk;

代码:___________________

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值