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. three.js 背景图片
  2. 理解Hinted Handoff
  3. 【Android 逆向】Android 权限 ( ro.product.cpu.abi 属性 | ro.zygote 属性 | dhcp.eth0 属性 | net.* 属性 )
  4. h5 video 手机上无法显示_手机镜象投屏到电视上全屏显示
  5. VMware vSAN6.7 设计和优化 vSAN 主机 vSAN 6.5带来七大更新 解读VMware超融合增长秘诀
  6. Redis 高级教程 Redis 安全(2)
  7. 创建第一个windows服务
  8. 分析微信聊天记录(1)——获取微信聊天记录
  9. abaqus对应python版本_Abaqus里应用Python的一些技巧
  10. m3u8简单教程之我不是药神下载
  11. alpha-beta 极大极小值剪枝算法
  12. jenkins 下载插件失败 有效的处理办法(亲测)
  13. PR(Adobe Premiere Pro)软件基础知识
  14. QOS中 PQ,CQ.RR,WFQ,CBWFQ,LLQ区分(下)
  15. 阿里淘咖啡火了 全球九大无人便利店物联网技术方案详解
  16. 王艾辉:下方重点关注3140 上方3190 破位则追
  17. php 鸟哥 配置文件,鸟哥:让PHP 7达到最高性能的几个Tips
  18. 学钢琴看简谱 你看这张图就够了
  19. 华为路ws5200设置虚拟服务器,华为路由WS5200怎么配置DMZ主机
  20. 创新方法72变(荣振环)

热门文章

  1. vue 电脑摄像头拍照
  2. 小程序wxParse的使用
  3. Java日期时间处理
  4. 品牌VI设计与网站设计
  5. 什么是 ASPICE ?-概述
  6. ​力扣解法汇总856. 括号的分数
  7. 基于java SSM框架+微信小程序实现电子书城阅读器演示【附项目源码+论文说明】
  8. ubuntu更换源的方法
  9. BUUCTF misc 专题(18)小明的保险箱
  10. java字符串编码和解码