题意:求不重叠的2段连续和的最大值。

状态定义f[i]为必选a[i]的最大连续和,mxu[i],mxv[i]分别为前缀和后缀的最大连续和。

注意:初始化f[]为0,而max值为-INF。要看好数据范围。

#include<cstdio>
#include<cstdlib>
#include<cstring> const int N=50010,INF=10010;
int a[N],f[N],mxq[N],mxh[N]; int mmax(int x,int y) {return x>y?x:y;}
int main()
{
int T,n;
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
int ans=-INF; mxq[0]=-INF,f[0]=0;
for (int i=1;i<=n;i++)
{
f[i]=f[i-1]+a[i];
mxq[i]=mmax(mxq[i-1],f[i]);
if (f[i]<0) f[i]=0;
/*//相同的意思
if (f[i-1]<0) f[i]=a[i];
else f[i]=f[i-1]+a[i];
mxq[i]=mmax(mxq[i-1],f[i]);
*/
} mxh[n+1]=-INF,f[n+1]=0;
for (int i=n;i>=1;i--)
{
f[i]=f[i+1]+a[i];
mxh[i]=mmax(mxh[i+1],f[i]);
if (f[i]<0) f[i]=0;
}
for (int i=1;i<n;i++)
ans=mmax(ans,mxq[i]+mxh[i+1]);
printf("%d\n",ans);
}
return 0;
}

最新文章

  1. JAVA程序中SQL语句无法传递中文参数
  2. java基础(三)
  3. Adobe AIR对本地文件(XML文件)的操作
  4. nginx同一iP多域名配置方法
  5. sqlserver卡号段分组
  6. IOS文件管理-NSFileMangager-NSdata
  7. VC++ 中滑动条(slider控件)使用 [转+补充]
  8. eclipse不能创建java虚拟机-解决方法
  9. 《火球——UML大战需求分析》(第1章 大话UML)——1.4 如何学好UML?
  10. ASP.Net动态创建GridView
  11. golang基础数据结构
  12. IntelliJ IDEA 控制台 乱码 有效解决办法
  13. express学习点滴- 永远不要忘记异步
  14. 封装sqlhelper类
  15. 启动redis
  16. 1-3 Spring Bean 的属性值设置
  17. C# 传统四舍五入保留两位小数(网上流传好多错误的版本)
  18. nginx(一)初识nginx
  19. C#多线程和线程池问题
  20. Jenkins+Ant+Jmeter搭建持续集成的接口测试平台(转)

热门文章

  1. LeetCode解题Golang(1-10)
  2. Sentry(v20.12.1) K8S 云原生架构探索, SENTRY FOR JAVASCRIPT 手动捕获事件基本用法
  3. 利用DES,C#加密,Java解密代码
  4. es6 Array.from + new Set 去重复
  5. 【剑指 Offer】11.旋转数组的最小数字
  6. LeetCode344 反转字符串
  7. 搭乘“AI大数据”快车,肌肤管家,助力美业数字化发展
  8. 利用css和jquery制成弹幕
  9. Soat控制HAProxy 动态增减服务器
  10. Haproxy-1.8.20 根据路径(URI)转发到后端不同集群