codevs2622数字序列( 连续子序列最大和O(n)算法)
2016-04-25 10:25
204 查看
/* 算法描述:维护一个s[p]表示累加和 并且更新最大值ans 如果s[p]<0 则从p+1重新累加 证明:设某个区间的起点和终点分别为s t 分两种情况 1.t<p:设s2表示1到s的累加和 s1表示s到t的累加和 s3表示1到t的累积和 根据前面的条件 s2>0 s1=s3-s2 所以有s3>s1 即 从1开始更优 2. t>=p:设s2表示1到p的累加和 s1表示1到s的累加和 s3表示s到p的累积和 根据前面的条件 s1>0 s2<0 s2=s1+s3 所以有 s3<0 设s4表示p到t的累加和 s5表示s到t的累加和 有s5=s4+s3 又因为s3<0 所以s5>s4 即s[p]<0 时 重新;累加更优 */ #include<iostream> #include<cstring> using namespace std; int n,a[100010],ans=-999999,s; int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; ans=max(ans,a[i]);//防止出现全部为负数 } for(int i=1;i<=n;i++) { s=s+a[i]; if(s<0)s=0; else ans=max(ans,s); } cout<<ans; return 0; }
相关文章推荐
- 浏览文本文件并进行修改保存
- RCNN学习笔记(0):rcnn简介
- 多态与父子类,抽象类new调用的一点区别-----学习日志
- 4月.site域名总量十强:阿里云季军 市场份额涨1%
- android so文件的加载过程以及常规错误处理
- Linux mm_struct基础
- java设计模式—工厂模式
- 随机过程--Metropolis-Hastings算法
- JAVA--适配器模式(Adapter)--设计模式六
- Keil-MDK 中 [WEAK] 的作用
- 配置文件通配符的问题
- VIM+ctags+cscope
- php 好用的函数
- Windows和Linux下Mysql 重置root 密码
- sg函数训练——开窍篇
- C++之“友元类”学习笔记
- Android 开发推荐书籍
- matlab中冒号的用法
- 开源日志记录工具log4j
- 第一阶段冲刺总结07