20221208学习总结

学习动态规划。

t1:在长度为 nn 的序列中任选连续一段数,使和最大。

可见 p1115 。

使用 dp 的思想解决。

定义原问题与子问题

需要对最后一段或者第一段进行分类讨论。

子问题:选了 n-1 个数的时候的连续和最大是多少。

但是有问题,这样的子问题势必产生后效性。

为什么?

例:1 2 3 4 -1 -1 -1 -1 -1 6

取到“6”的时候,就会发现 n-1 个时最大和,是“1 2 3 4”。 但是取时,不能选,中间的 -1 同样是要选的。

把思路转换一下,如何解决“隔空取物”的现象?

如果要看 n 选不选,肯定要选 n-1 ,如何确定 n-1 必定是一个状态的结尾呢?

只要改变这个状态。

变成以 n-1 结尾的连续和最大是多少


确定子问题后,就要想如何把原问题与子问题联系起来。

把最后一个数提出来,分类讨论, 2 种情况:

  • 直接取单独的数

  • 在之前的数的基础上把当前数加上去

所以状态方程为:dp[i]=max(dp[i-1]+a[i],a[i]);

其实也可以认为,如果之前的加的一段和已经 <0 ,不如新开一段。

代码:

在此基础上,可引出 t2

t2

在长度为 n 的序列中,选取一段不相邻的数,使和最大。

还是要对最后一个进行分类讨论。

例:1 2 3 4 -1 -1 -1 -1 -1 6

把 6 单独看,可以分两类:

  • 选 那就要看到之前

  • 不选

本文作者:cjrqwq

本文链接:https://www.cnblogs.com/yfzqwq/p/18492841

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   cjrqwq  阅读(3)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
展开
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.