高中OJ1771. 【NOIP动态规划专题】烽火传递

题目大意:

在一个长度为N的序列当中选出任意个数,使得其中任意连续M个数中至少有一个数被选,求选出数之和的最小值。


题目分析:

显而易见的DP。

设F[i]表示序列中从1~i位置满足条件且第i个位置必选的最小值

(初始化自己想)

先假设M=3  0表示未选 1表示选

0 1 0 0 1 0 0

的情况也是可以的。

所以可以得出方程:

F[i]=F[i-j]+a[i]

得分:80分


帅气的满分做法:

因为二重循环的时间复杂度是O(nm)所以会爆

SO我们维护一个小根堆(好吧我承认我不知道单调队列),把F数组的元素放进去,每次拿走堆顶元素直到该元素符合要求。

为了满足所有位置,最后答案是min(F[i]) (i=n-m+1~n)


注释:

因为这题不算很难,所以有些细节地方就留给读者自行思考了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值