TopCoder SRM450C: RowGame 题解

看到k这么大,我的思维立刻就往什么dp+矩乘或者是倍增上走
dp+矩乘看上去挺靠谱的,但是题目要求任意时刻权值非负,那么就得再加一维来控制当前的权值,而当前权值的范围是很大的,这样会超时
于是考虑仔细观察此题的性质
我们可以设想:如果 kinf k → i n f 那么我一定会想办法走到这个序列的最长子串上然后来回摆动
然而并不是能一下子走到最长子串上的,如果中间有一个比较大的负数,那我就要在它之前的一个区间内来回摆动,直到我的和积蓄到超过这个负数的绝对值,我就能跨过去,前往下一个和更大的区间
所以我的路线一定是长成这样的
这里写图片描述
我们称一个不停的往返的区间为一个块,那么我们可以发现一个性质,这些块的权值一定是从左向右递增的,否则我就可以留在左边的块不向右走
这个性质就带来了一个另一个很好的性质:我一定会在前面“浪费”尽可能少的步数,因为走到后面之后我的收获更多,也就是说,一旦我的权值能够到下一个区间我就会立刻过去,不会再在当前的小区间上停留
所以我们可以看出,步数是第一关键字,步数相同的情况下权值和是第二关键字
考虑dp,dp1[i]表示走到以i结尾的块所需要的最少步数,dp2[

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值