51nod 1050 循环数组最大子段和【环形DP/最大子段和/正难则反】
第1行:整数序列的长度N(2 <= N <= 50000) 第2 - N+1行:N个整数 (-10^9 <= S[i] <= 10^9)
输出循环数组的最大子段和。
6 -2 11 -4 13 -5 -2
20【代码】:
#include<cstdio> #include<cstring> #include<queue> #include<iostream> #include<stack> #define maxn 1005 #define maxm 50005 #define INF 0x3f3f3f3f #define ll long long using namespace std;int n; ll a[maxm];//一种是最大值没有过界,那么就是最大连续子段和 ll Max(int n) {ll dp[maxm];dp[0]=0;ll ans=0;for(int i=1;i<=n;i++){if(dp[i-1]>0) dp[i]=dp[i-1]+a[i];else dp[i]=a[i];ans=max(ans,dp[i]);}return ans; }//另一种是过界了,这时候我们可以转换一下思路,要求过界的最大连续子段和--->我们可以求不过界的最小连续子段和,这样剩下的数字和不但是最大的并且是过界连续的。 //总和-不过界最小连续子段和 23 5 -9 -18 -7 6 ll Min(int n) {ll dp[maxm];dp[0]=0;ll ans=0;for(int i=1;i<=n;i++){if(dp[i-1]<0) dp[i]=dp[i-1]+a[i];else dp[i]=a[i];ans=min(ans,dp[i]);}return ans; }int main() {scanf("%d",&n);ll sum=0;for(int i=1;i<=n;i++){scanf("%lld",&a[i]);sum += a[i];}printf("%lld\n",max(Max(n),sum-Min(n)));return 0; }
转载于:https://www.cnblogs.com/Roni-i/p/8934238.html
51nod 1050 循环数组最大子段和【环形DP/最大子段和/正难则反】相关推荐
- 51nod 1050循环数组最大字段和
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 思路解析:一开始想着直接将长度为n的数组延长至2n-1 ...
- 51Nod 1050 循环数组最大子段和
有两种方式: 1.在首尾之间 2.在尾首之间 对于第一种直接来dp就好,第二种需要将其数组全部取负,然后取到其最大值(肯定是负数的最大值)然后dp即可,最后比较这两个答案谁比较大就输出哪个 1 #in ...
- 1050 循环数组最大子段和
1050 循环数组最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该 ...
- 【51Nod - 1270】数组的最大代价(dp,思维)
题干: 数组A包含N个元素A1, A2......AN.数组B包含N个元素B1, B2......BN.并且数组A中的每一个元素Ai,都满足1 <= Ai <= Bi.数组A的代价定义如下 ...
- 51Nod-1050 循环数组最大段和【最大子段和+最小子段和+DP】
1050 循环数组最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+ ...
- 【51nod - 1050】循环数组最大子段和(dp)
题干: N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1], ...
- 循环数组的最大子段和
问题描述: N个整数组成循环序列,求这个序列的最大子段和. 例如:-2 11 -4 13 -5 -2 ANSWER: 20 解决: 解决这个问题需要有求解最大子段和的基础. 循环数组 ...
- 一维循环数组最大子数组求解
#include "stdafx.h" #include <stdio.h> int _tmain(int argc, _TCHAR* argv[]) {int i, ...
- php环行队列实现,java数组实现队列及环形队列实现过程解析
这篇文章主要介绍了java数组实现队列及环形队列实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码内容 ArrayQueue---用数 ...
最新文章
- 作为谷歌开发者布道师,我为什么要写这本通俗的《数据压缩入门》(一)
- 成为顶级CIO ,应该怎么做?
- python 代码-代码的重试机制(python简单实现)
- 快速幂(二进制,十进制)
- Outlook Express设置方法
- 怎么判断linux22端口是否通,在Linux环境下使用SSH判断端口是否通(示例代码)
- Python案例:通过方向键移动屏幕上的图像
- 计算机一级学科评选,我系力学被评选为一级学科国家重点学科
- pandas库基础笔记
- 平肝息风药题库【1】
- 360漏洞修复的提取
- 语音验证码接口(JSP)语言
- Excel中3个超级好用的条件求和的函数
- 中间选民定理(迭代剔除劣势策略,换位思考)
- GitHub个人Blog完全攻略
- strtok函数源码
- 贵州杰赛s65机顶盒子CPU S905M-B 刷机教程及纯尽版固件
- 3D游戏建模师职业现状:大学生毕业就是失业,真的这么可怕吗
- CAD编辑器中CAD线型怎么修改?
- RGB图像中特定颜色的提取
热门文章
- 查找子字符串----KMP算法深入剖析
- Sonar+Hudson+Maven构建系列之三:安装Hudson
- kd-Tree 【专题@AbandonZHANG】
- 【转】socket提交http表单 [C++]
- NNIE模型转换环境搭建
- 锁机制有什么用?简述Hibernate的悲观锁和乐观锁机制
- [JOYOI] 自然数拆分Lunatic版
- Linux unit 5
- Node.js---02、node.js 模块加载机制
- OEA中的AutoUI重构(1) - Command自动生成