2018.09.23 孙悟空大战鲤鱼精(单调队列优化dp)

博客讲述了孙悟空在通天河追击鲤鱼精的故事,转化为一个数学问题,即寻找通过一列格子的最大魔法值。问题采用动态规划(dp)解决,并利用单调队列进行优化。输入包含格子数量、移动范围和各格子的魔法值,输出为最大魔法值及路径。样例给出了具体的数据和解题思路,提示强调了数据范围和单调队列的操作要点。
摘要由CSDN通过智能技术生成
描述

孙悟空大战鲤鱼精,孙悟空在通天河遇到鲤鱼精,他嫉恶如仇,看见妖精就手痒(忘了自己是妖精)。但是鲤鱼精知道孙悟空的厉害,在孙悟空来到通天河,鲤鱼精就跑到了河对面。于是孙悟空就去追鲤鱼精。 我们可以把通天河看成一列格子,从0编号到N,孙悟空只能从小号格子到大号格子,当他在第i号格子,他移动的时候只会到[i+L,i+R]的某一格。每一个格子有一个魔法数Wi,第0号格子指数诶0,当孙悟空在某一格停留时就会获得这个魔法值Wi。孙悟空希望通过通天河时获得最大的魔法,这样他才能狠打一下鲤鱼精,可是孙悟空战斗力高,脑袋不咋地(猴脑),他希望你来帮他计算如何达到对岸,他开始在第0号 格。他只要最后一步落在的位置编号大于了N就算通过了通天河

输入

第1行:3个正整数N, L, R
第2行:N+1个整数,第i个数表示编号为i-1的格子的魔法数A[i-1]

输出

第1行:一个整数,表示最大魔法值。保证不超过2^31-1 第2行:空格分开的若干个整数,表示孙悟空前进的路线,最后输出-1表示到达对岸

样例输入

5 2 3
0 12 3 11 7 -2

样例输出

11
0 3 -1

提示

对于60%的数据:N <= 10,000
对于100%的数据:N <= 200,000
对于所有数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值