求连续序列的最大子序列和

求一个序列的最大子序列和,这个可以有几种方法都可以去求解,这里我提供两种方法给大家。

假如这个序列是{1,-2,3,4},显然最大子序列和是7,那么这个要怎么去计算呢?

第一种方法就是顺序求取,可以先算一下只有一个元素的最大值是多少,再算一下连续两个元素的最大值是多少,再算一下连续三个元素的最大值是多少 ,直到n个元素全部都取完。用一个数组来保存连续一个,连续两个,连续n个的和的最大值,代码如下。

#include<iostream>
using namespace std;
const int N=-1e6+2;
int main()
{int n;cin >> n;int a[n];for(int i=0;i<n;i++){cin >> a[i];}int b[n];for(int i=0;i<n;i++){b[i]=N;for(int j=0;j<n-i;j++){int sum=0;for(int k=j;k<=j+i;k++){sum+=a[k];}if(sum>b[i]){b[i]=sum;}}}int m=b[0];for(int i=1;i<n;i++){if(m<b[i]){m=b[i];}}cout << m;return 0;
}

为了提高效率,可以用两个for就可以实现,最大值不用数组表示,用一个变量max1,保存一下。

#include<iostream>
const int N=1e6+1;
using namespace std;
int main()
{int n;cin >> n;int a[n];for(int i=0;i<n;i++){cin >> a[i];}int max1=-N;for(int i=0;i<n;i++){int sum=0;for(int j=i;j<n;j++){sum+=a[j];if(max1<sum){max1=sum;}}}cout << max1;return 0;
}

最后,给大家提供一下最简单的方法,用动态规划就可以做,做动态规划最重要的就是要找到状态转移方程,这个问题的状态转移方程就是

dp[i]=a[i]+dp[i-1]或者是dp[i]=a[i],代码如下

#include<iostream>
#include<algorithm>
const int N=1e6;
using namespace std;
int main()
{int n;cin >> n;int a[n];int dp[n];for(int i=0;i<n;i++){cin >> a[i];dp[i]=a[i];}int max1=-N;for(int i=1;i<n;i++){dp[i]=max(dp[i-1]+a[i],a[i]);if(max1<dp[i]){max1=dp[i];}}cout << max1;return 0;
}

  这个只用了一个for就可以实现了,效率相比前面几个都提高了不少。

转载于:https://www.cnblogs.com/sddr/p/10725102.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言与数据库开发:01-09

包和工具 Go语言有超过100个的标准包&#xff08;译注&#xff1a;可以用 go list std | wc -l 命令查看标准包的具体数目&#xff09;&#xff0c;标准库为大多数的程序提供了必要的基础构件。在Go的社区&#xff0c;有很多成熟的包被设计、共享、重用和改进&#xff0c;目前互…

android 文本后图标_如何在Android中更改文本,图标等的大小

android 文本后图标Let’s face it: no matter how good the screens are on our phones and tablets, the text can sometimes be too tiny if you have poor eyesight. The good news is that there are a variety of methods to help you alleviate squinting just to make …

Code Chef February Challenge 2019题解

传送门 \(HMAPPY2\) 咕 话说这题居然卡\(scanf\)的么&#xff1f;&#xff1f;&#xff1f; int T;cin>>T; while(T--){cin>>n>>a>>b>>k;puts(n/an/b-n/(a*b/__gcd(a,b))*2>k?"Win":"Lose"); } \(CHEFING\) 咕咕 int T;…

Linux文本查看命令之uniq

uniq是专用的去重命令限制&#xff1a;必须相邻的两行内容相同才算是重复&#xff0c;如果内容相同&#xff0c;但是两行之间有其他内容就不算重复。使用uniq命令先排序&#xff0c;再去重。-d 的选项是用来仅显示重复行的-u 仅显示不重复的行-c 统计每一行出现的次数本文转自 …

BitMap位图与海量数据的理解与应用

1. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value&#xff0c; 而Key即是该元素。由于采用了Bit为单位来存储数据&#xff0c;因此在存储空间方面&#xff0c;可以大大节省。 2、 Bit Map的基本思想 我们先来看一个具体的例子&a…

imdb文件_如何停止IMDB应用程序向您发送通知

imdb文件Recently, the IMDB app started sending out notifications for “Featured Trailers”. As near as I can guess, this is where the production company pays IMDB to push a link to the trailer to a load of people in an effort to promote it. If IMDB isn’t …

科普:BCH能够买什么?如何使用BCH买东西?

2019独角兽企业重金招聘Python工程师标准>>> 一提到BCH&#xff0c;你最想拿它做什么&#xff1f;可能对于投资者来说&#xff0c;它是暴富的神器&#xff0c;是投资的工具&#xff1b;对于开发者来说&#xff0c;是实现自身价值构建应用程序的网络和平台&#xff0…

驱动学习之驱动体验

1&#xff1a;什么是linux驱动 从本质上讲&#xff0c;驱动就是属于内核层面的程序代码&#xff0c;是直接和硬件打交道的。与裸机中直接操作寄存器去操作硬件的不同之处在于&#xff0c;裸机中操作的是物理内存&#xff0c;而我们在驱动中操作的是虚拟内存&#xff0c;驱动中还…

vim(三)golang代码跳转配

在golang的代码里跳来跳去。。。。 godef 安装 跳转是通过godef实现&#xff0c;godef的安装目录一般是$GOBIN,只要让godef命令在$PATH下即可 godef 命令安装&#xff1a; go get -v github.com/rogpeppe/godef go install -v github.com/rogpeppe/godef vim插件安装 ~/.vimrc配…

如何将iPhone或iPad更新到iOS 11

Apple released iOS 11 on September 19, 2017. You can upgrade by tapping “Install Now” when an update message appears, but you can also check for the update and install it immediately. 苹果于2017年9月19日发布了iOS11 。您可以通过在出现更新消息时点按“立即安…

三、Python-列表

三、Python-列表 一、序列&#xff1a;是一块用于存放多个值的连续内存空间&#xff0c;并且按一定顺序排列&#xff0c;可以通过索引取值索引&#xff1a;从左到右的索引从0开始依次增加的正整数&#xff1b;从右到左的索引为-1开始的复数切片&#xff08;分片&#xff09;&am…

使用基本ACL规则限制用户登录

要求&#xff1a;配置ACL 2005规则&#xff0c;限制vty 0 4界面只允许IP地址为192.168.1.8的用户和10.10.100.0/24网段的用户登录设备。 配置如下&#xff1a; system-view acl 2005 rule permit source 192.168.1.8 0 //允许IP地址为192.168.1.8的用户登录设备 rule permit s…

pandas 入门(2)

from pandas import Series, DataFrame, Index import numpy as np from numpy import nan as NAobj Series(range(3), index[a, b, c]) print(obj) index obj.index print(index) print(index[1:]) # index[1] d index对象时不可以被修改的 为了安全和共享index Index(n…

如何在Outlook 2013中管理附件

There comes a time, job-hunting, or sharing photos with older family members, where you may need to send stuff the old fashioned way – as an email attachment. If you email at work, it may be a part of your email repertoire. 有时需要找工作&#xff0c;与年长…

了解cron以及使用cron定时备份MySQL

cron是一个linux下的定时执行工具&#xff0c;可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务&#xff0c;但它不自动起来&#xff0c;可以用以下的方法启动、关闭这个服务&#xff1a; /sbin/service crond start //启动服务 /sbin/service crond stop //关…

ef 并发控制

ef 并发控制 ef 并发控制 什么是并发&#xff1f;并发分悲观并发和乐观并发。悲观并发&#xff1a;比如有两个用户A,B&#xff0c;同时登录系统修改一个文档&#xff0c;如果A先进入修改&#xff0c;则系统会把该文档锁住&#xff0c;B就没办法打开了&#xff0c;只有等A修改完…

C#实现写入文本文件内容功能

private void write_txt(string str1, string str2, string str3)02{03System.DateTime currentTime System.DateTime.Now;04string strYMD currentTime.ToString("d");05string FILE_NAME "MyFileSend" strYMD ".txt";//每天按照日期建立一…

如何在Windows上设置BitLocker加密

BitLocker is a tool built into Windows that lets you encrypt an entire hard drive for enhanced security. Here’s how to set it up. BitLocker是Windows内置的工具&#xff0c;可用于加密整个硬盘驱动器以增强安全性。 设置方法如下。 When TrueCrypt controversially …

Java字节码方法表与属性表深度剖析

方法表&#xff1a; 在上一次咱们已经分析到了字段信息了&#xff0c;如下&#xff1a; 紧接着就是方法相关的信息了&#xff1a; 而它展开之后的结构为&#xff1a; 所以往后数2个字节&#xff0c;看一下方法的总数&#xff1a; 3个方法&#xff0c;可咱们只定义了两个方法呀&…

最大连续子数组和与JUnit测试

【题目】最大连续子数组和&#xff08;最大子段和&#xff09; 背景 问题&#xff1a; 给定n个整数&#xff08;可能为负数&#xff09;组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]a[i1]…a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0&#xff0c;依此定义…