HDU5459字符串斐波那契之递推

26 篇文章 0 订阅

这题起初以为是一个找规律题,然后就各种打表找规律,然而最后发现并不能找到什么规律,

其实是一个递推题目,主要就是看你能不能想到怎么取递推:

题目所求所有C之间的距离,又因为相加的性质,两边的单独处理是不变的,每次拼接之后多出来的只是两边各一个的情况,有了点分治的味道。而左右两边的情况则不妨将这段距离差分成x,y两部分分开计算。对于左串来说,每一个C都要和右串所有的C进行一次配对,所计算的距离是当前C距离拼接位置(也就是左串的末尾)的距离,所计算的次数为右串中C的个数。对于右串来说,每一个C都会和左串的任意个C进行配对,计算的距离亦是距离拼接位置的距离(可以利用补集的思想去求),计算的次数是左串中C的个数。

则递推关系为:
dp[i] = dp[i-1]+dp[i-2]+dis[i-2]*num[i-1]+(len[i-1]*num[i-1]-dis[i-1])*num[i-2];(dis代表当前串中C到末尾距离和,num表示C的个数,len表示长度)
同时:
len[i] = len[i-1]+len[i-2];
num[i] = num[i-1]+num[i-2];
dis[i] = dis[i-1]+dis[i-2]+num[i-2]*len[i-1];


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值