vector v{ -2,1,-3,4,-1,2,1,-5,4 }; 最大子序列为{1,4,2,1,4} 因此是12

如果我们使用动态规划
动态规划一定要看清四点:
1.状态定义
2.状态转移方程
3.初始值
4.返回值

根据题目可以得到如下四点:
//状态定义 dp[i] 以origin_v[i] 结尾数组最长和

//状态转移方程 dp[i]
//将dp[0], dp[1], dp[2]…dp[i-1]加上origin_v[i],比较大小,最大的即为dp[i] 也就是说dp[i]= max(dp[0] + origin_v[i]//, dp[1] + origin_v[i], dp[2] + origin_v[i]…dp[i - 1] + origin_v[i], origin_v[i])
//注意后面还有个origin_v[i] ,千万别忘记比较了

//初始值 dp[i]=origin_v[0]

//返回值 将dp中的最大数取出来即可

代码


#include<iostream>#include<algorithm>
#include<vector>
#include<string>
using namespace std;
class Solution {public:int longest_sum(vector<int> origin_v) {//状态定义  dp[i]  以origin_v[i] 结尾数组最长和//状态转移方程  dp[i]//将dp[0], dp[1], dp[2].....dp[i-1]加上origin_v[i],比较大小,最大的即为dp[i]  也就是说dp[i]= max(dp[0] + origin_v[i]//, dp[1] + origin_v[i], dp[2] + origin_v[i].....dp[i - 1] + origin_v[i], origin_v[i])//注意后面还有个origin_v[i] ,千万别忘记比较了//初始值 dp[i]=origin_v[0]//返回值  将dp[i]中的最大数取出来即可vector<int > dp(origin_v.size(), 0);if (origin_v.size() == 0){return  0;}int longmax_sum = origin_v[0];dp[0] = origin_v[0];for (int i = 1;i < origin_v.size();i++){int tempmax = origin_v[i];for (int j=0;j<i;j++){tempmax = max(tempmax, dp[j] + origin_v[i]);}dp[i] = tempmax;longmax_sum = max(longmax_sum, dp[i]);}return longmax_sum;}
};int main()
{Solution s;vector<int> v{ -2,1,-3,4,-1,2,1,-5,4 };//vector<int> v{ 2,-1,5 };int max_sum = s.longest_sum(v);cout << "max_sum=" << max_sum << endl;}

思考
当我们正在暗暗自喜时,认真看看代码,有没有发现一个问题。状态转移方程:max(dp[0] + origin_v[i], dp[1] + origin_v[i], dp[2] + origin_v[i]…dp[i - 1] + origin_v[i], origin_v[i]) 这个不就是看origin_v[i]是否是大于0吗?再看看题目vector v{ -2,1,-3,4,-1,2,1,-5,4 }的最大子序列和。不就是将数组中大于0的数全部加一遍即可。===》是不是发现简单问题被我们复杂化了。
但是我们正因为如此,才需要多多思考,一个问题想出不同的解法。从时间复杂度,空间复杂度入手。 比如拿LRU LFU 举例。 为什么 LRU底层结构是散列表+双向链表?为什么LFU 的底层结构是用双向链表嵌套?

动态规划:最大子序列和相关推荐

  1. 动态规划--连续子序列的最大和

    给定k个整数的序列{N1,N2,...,Nk },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= k.最大连续子序列是所有连续 ...

  2. 动态规划之子序列问题

    文章目录 一.最长递增子序列I 二. 最长递增子序列II 二.数字和最大的递增子序列 三.连续子数组最大和 四.最长公共子序列 一.最长递增子序列I 题目描述 给定一个长度为N的数列,求数值严格单调递 ...

  3. Java之动态规划之子序列问题

    目录 0.动态规划问题 一.最长递增子序列 1.题目描述 2.问题分析 3.代码实现 二.最长递增子序列 1.题目描述 2.问题分析 3.代码实现 三.本质上升子序列个数 1.题目描述 2.问题分析 ...

  4. 动态规划之子序列以及子数组类型的问题

    子序列类型的问题 两种思路 第一种思路模板是一个一维的 dp 数组:比如最长递增子序列.在这种思路中 dp 数组的定义是:以 nums[i] 结尾的目标子序列(最长递增子序列)的长度是 dp[i] 第 ...

  5. 动态规划——最大子序列和

    背景  给定一个整数数组num[i]num[i]num[i],找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 思路  用数组dp[i]dp[i]dp[i]来保存遍历到第i位时 ...

  6. 0804------算法笔记----------最长公共子序列

    1.动态规划和子序列 1.1 动态规划的特征: a)最优子结构,求问题的解必须获取子问题的最优解: b) 重叠子问题,使用原始的递归存在大量的重复计算. 1.2 子序列的概念: a)子序列中的元素都是 ...

  7. 动态规划系列问题—从小白到大佬的入门、进阶之旅!!!

    前言 本篇文章写了将近一万五千字,整理了关于动态规划系列问题的绝大部分分支,包括动态规划的介绍,相关术语等基础内容,也有区间DP,状压DP等进阶知识. 不管你是刚学习该算法的小白,还是对该算法有了一定 ...

  8. 算法——动态规划(DP)

    动态规划问题,大致可以通过以下四部分进行解决: 划分阶段:按照问题的时间或空间特征,把问题分为若干个子阶段.(划分后的子阶段一定要是有序的或者是可排序的,否则问题就无法求解.) 状态表示:将问题发展到 ...

  9. 动态规划之背包问题——01背包

    算法相关数据结构总结: 序号 数据结构 文章 1 动态规划 动态规划之背包问题--01背包 动态规划之背包问题--完全背包 动态规划之打家劫舍系列问题 动态规划之股票买卖系列问题 动态规划之子序列问题 ...

最新文章

  1. CodeForces - 1486D Max Median(二分+最长连续子段和)
  2. 聊聊HTTPS和SSL/TLS协议
  3. wince下Gpio 驱动程序
  4. Android极光推送
  5. 拿4k的前端开发都会做些什么?
  6. PAT (Basic Level) Practice (中文)答案合集
  7. 中国书写工具行业市场供需与战略研究报告
  8. java声明接口_为什么必须用Java声明接口?
  9. i58300h和i7 8750h哪个好 i58300h和i7 8750h对比差距大吗
  10. 今天正式开始做毕业设计——自助装机系统
  11. elementUI的tree组件搜索过滤,可识别拼音,且不区分大小写
  12. Source Files 与 Resource Files 的区别
  13. 解决IE下input事件初始化自动执行的问题
  14. SAS编程|ADAM阶段性小结
  15. 使用iMovie和Keynote制作App Preview
  16. Hoofball(B题)
  17. python ——时间间隔
  18. 国际版抖音正确打开方式
  19. 【XSY2500】都城(树形dp)
  20. 华东地区博友链接集合(陆续增加中)

热门文章

  1. DataFrame的loc,iloc访问方式
  2. 男子马云性格与星座关系(转)
  3. 网络安全之ENC1应用内/外网音视频传输完全隔离方案
  4. 配置zabbix监控nginx状态,监控华为路由器
  5. Fiddler的介绍和使用
  6. 自动驾驶玩漂移,蛇皮走位何其骚!斯坦福最新研究:《头文字D》无人车版来了...
  7. GaiaX开源解读 | 基于优酷业务特色的跨平台技术
  8. Rasa 3.x 学习系列-Rasa [3.5.8] -2023-05-12新版本发布
  9. 自由开发者_免费可商用的图片资源推荐
  10. 我在的互联网医疗公司解散了