1481:Maximum sum (前缀和+dp)
2024-10-07 13:38:53
【题目描述】
对一个序列A={a1, a2,..., an}给出函数:
t1 t2
d(A) = max{ ∑ai + ∑aj | 1 <= s1 <= t1 < s2 <= t2 <= n }
i=s1 j=s2
求出该函数最大值。
【题目链接】
http://noi.openjudge.cn/ch0206/1481/
【算法】
类似股票买卖,决策一个i的位置,i之前的最大子段和和i+1及其之后的最大子段和的最大值。注意前i个最大子段和的求法:要记录一个前缀和最小值,注意初始化应当为a【1】和0的较小值(wa了半天才发现)。
【代码】
#include <bits/stdc++.h>
using namespace std;
int t,n,i;
int a[],pre[],post[];
int main()
{
scanf("%d",&t);
while(t--) {
memset(pre,,sizeof(pre));
memset(post,,sizeof(post));
scanf("%d",&n);
for(i=;i<=n;i++) scanf("%d",&a[i]),a[i]+=a[i-];
pre[]=a[];
int minn=min(,a[]);
for(i=;i<n;i++) minn=min(minn,a[i]),pre[i]=max(pre[i-],a[i]-minn);
post[n]=a[n]-a[n-];
int maxn=a[n];
for(i=n-;i>;i--) maxn=max(maxn,a[i]),post[i]=max(post[i+],maxn-a[i-]);
int ans=-1e9;
for(i=;i<n;i++)
ans=max(ans,pre[i]+post[i+]);
printf("%d\n",ans);
}
return ;
}
最新文章
- javascript中函数声明和函数表达式浅析
- oracle 函数写法 总结
- PSP个人(观众界面)
- javascript 设计模式-----模块模式
- ios 适应屏幕
- bzoj 3489: A simple rmq problem k-d树思想大暴力
- ViewSwitcher用法浅析
- homework-05 GoldNumberServer
- 书签小助手V1.1发布了
- paip.jdk1.4 1.5(5.0) 1.6(6.0) 7.0 8.0特点比较与不同
- WebService之CXF注解报错(一)
- ASP.NET MVC制作404跳转(非302和200)
- Description has only two Sentences(欧拉定理 +快速幂+分解质因数)
- 我的 FPGA 学习历程(14)—— PWM 脉冲宽度调制
- 五子棋.html
- 专题1:记忆化搜索/DAG问题/基础动态规划
- python必看经典书籍:笨办法学python
- 做二级菜单时候遇到的关于事件冒泡以及mouseover和mouseenter的不同
- unity中实现静态的3D对象对其他对象的跟随
- bzoj3404
热门文章
- 2019-3-9-通过-frp-开启服务器打开本地的-ZeroNet-服务器外网访问
- 联想ideapad 310s如何进BIOS,换固态硬盘SSD,配置U盘启动,重装Win10系统
- 04.Linux-CentOS系统sudo权限配置
- 学Python的第六天
- docker设置proxy
- python 小工具 重命名当前文件夹内所有的文件,升序命名
- python NameError: name &#39;file&#39; is not defined
- Test 6.29 T3 小学生
- Linux内核设计与实现 总结笔记(第五章)系统调用
- ubuntu18.04-安装最新cmake