【noi 2.6_1481】Maximum sum(DP)
2024-09-02 21:32:00
题意:求不重叠的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;
}
最新文章
- JAVA程序中SQL语句无法传递中文参数
- java基础(三)
- Adobe AIR对本地文件(XML文件)的操作
- nginx同一iP多域名配置方法
- sqlserver卡号段分组
- IOS文件管理-NSFileMangager-NSdata
- VC++ 中滑动条(slider控件)使用 [转+补充]
- eclipse不能创建java虚拟机-解决方法
- 《火球——UML大战需求分析》(第1章 大话UML)——1.4 如何学好UML?
- ASP.Net动态创建GridView
- golang基础数据结构
- IntelliJ IDEA 控制台 乱码 有效解决办法
- express学习点滴- 永远不要忘记异步
- 封装sqlhelper类
- 启动redis
- 1-3 Spring Bean 的属性值设置
- C# 传统四舍五入保留两位小数(网上流传好多错误的版本)
- nginx(一)初识nginx
- C#多线程和线程池问题
- Jenkins+Ant+Jmeter搭建持续集成的接口测试平台(转)
热门文章
- LeetCode解题Golang(1-10)
- Sentry(v20.12.1) K8S 云原生架构探索, SENTRY FOR JAVASCRIPT 手动捕获事件基本用法
- 利用DES,C#加密,Java解密代码
- es6 Array.from + new Set 去重复
- 【剑指 Offer】11.旋转数组的最小数字
- LeetCode344 反转字符串
- 搭乘“AI大数据”快车,肌肤管家,助力美业数字化发展
- 利用css和jquery制成弹幕
- Soat控制HAProxy 动态增减服务器
- Haproxy-1.8.20 根据路径(URI)转发到后端不同集群