博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求连续序列的最大子序列和
阅读量:5952 次
发布时间:2019-06-19

本文共 1182 字,大约阅读时间需要 3 分钟。

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

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

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

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

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

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

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

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

#include
#include
const int N=1e6;using namespace std;int main(){ int n; cin >> n; int a[n]; int dp[n]; for(int i=0;i
> a[i]; dp[i]=a[i]; } int max1=-N; for(int i=1;i

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

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

你可能感兴趣的文章
access_token is invalid or not latest hint
查看>>
H3C设备之 EASY NAT
查看>>
Linux常用命令参考手册02
查看>>
linux 编写shell管理脚本01。2
查看>>
Emmet 文档下载,所有快捷键总结
查看>>
通过EmbeddedServletContainerCustomizer接口调优Tomcat
查看>>
hdu2000——ASCII码排序
查看>>
spring配置线程池
查看>>
Ubuntu 16.04 安裝chrome
查看>>
开发了个 Flipper 调试工具的 Flutter 版本 SDK,让 Flutter 应用调试起来更容易
查看>>
08.实例方法和类方法的区别与及工厂方法
查看>>
mysql 备份
查看>>
内核编译
查看>>
继承和泛型
查看>>
exchange2010 取消OWA内更改密码选项
查看>>
Reverse digits of an integer.
查看>>
openresty 安装
查看>>
2014年前端开发者如何提升自己
查看>>
Web前端工程师应该掌握的内容有哪些
查看>>
软件公司多注重开发不注重管理
查看>>