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[]=;
ll ans=;
for(int i=;i<=n;i++){
if(dp[i-]>) dp[i]=dp[i-]+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[]=;
ll ans=;
for(int i=;i<=n;i++){
if(dp[i-]<) dp[i]=dp[i-]+a[i];
else dp[i]=a[i];
ans=min(ans,dp[i]);
}
return ans;
} int main()
{
scanf("%d",&n);
ll sum=;
for(int i=;i<=n;i++){
scanf("%lld",&a[i]);
sum += a[i];
}
printf("%lld\n",max(Max(n),sum-Min(n)));
return ;
}
51nod 1050 循环数组最大子段和【环形DP/最大子段和/正难则反】的更多相关文章
- 51nod 1050 循环数组最大子段和
题目链接:51nod 1050 循环数组最大子段和 #include<stdio.h> #include<algorithm> using namespace std; ; l ...
- 51Nod 1050 循环数组最大子段和 | DP
Input示例 6 -2 11 -4 13 -5 -2 Output示例 20 分析: 有两种可能,第一种为正常从[1 - n]序列中的最大子字段和:第二种为数组的total_sum - ([1-n] ...
- 51nod 1050 循环数组最大子段和【动态规划】
N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a[n] ...
- 51nod 1050 循环数组最大子段和 单调队列优化DP
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 这个呢,这个题之前 求一遍最大值 然后求一遍最小值 ...
- 51nod 1050 循环数组最大子段和 (dp)
http://www.51nod.com/onlineJudge/questionCode.html#problemId=1050¬iceId=13385 参考:http://blog. ...
- 1042 数字0-9的数量 1050 循环数组最大子段和 1062 序列中最大的数 1067 Bash游戏 V2 1092 回文字符串
1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次 ...
- CF 1005B Delete from the Left 【模拟数组操作/正难则反】
You are given two strings s and t. In a single move, you can choose any of two strings and delete th ...
- 51nod 循环数组最大子段和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 对于普通的数组,只要求一次最大子段和即可.但是这题是可以循环的,所 ...
- 51nod 循环数组最大子段和(动态规划)
循环数组最大子段和 输入 第1行:整数序列的长度N(2 <= N <= 50000) 第2 - N+1行:N个整数 (-10^9 <= S[i] <= 10^9) 输出 输 ...
随机推荐
- 序列化模块--json模块--pickle模块-shelve模块
什么叫序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传播到远程,因为硬盘或网络传输时只能接受bytes 例: 把内存数据 转成字符 # data ={# 'roles ...
- 关于mybatis 一级缓存引发的问题
场景: 由于在一个方法中存在多个不同业务操作 private void insertOrUpdateField(CompanyReport entity) { //计算并数据 calcReportDa ...
- Asp.net自定义控件开发任我行(7)-注册自定义事件
摘要 前面我们已经把嵌入资源讲完了,不知道大家有没有得到收益,本章主要讲自定义事件,也就是给TextBox注册一个点击事件. 引言 不知道道上的朋友有没有注意到TextBox控件没有点击事件,就连网上 ...
- Linux之我有你也有-共享平台NFS服务器搭建
Linux之我有你也有-共享平台NFS服务器搭建 最近因工作需要,所以要搭一个共享的服务器用于存储.实现你有我有大家有的共享的和谐局面.想到了NFS-Network File System.接下来我便 ...
- leetcode 【 Find Minimum in Rotated Sorted Array 】python 实现
题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ...
- leetcode 【 Search in Rotated Sorted Array 】python 实现
题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ...
- IOS开发学习笔记020-练习总结
自己做了一遍,现在再复习一下,总结一下. 最终效果如下 1.新建一个工程Single View Application 总体如下 不过要关闭自动布局功能 这是按下设置按钮显示的界面默认 ...
- 移动弱网测试方案Network Emulator for Windows Toolkit
移动app在测试时,有时需要考虑弱网的情形下,app的表现,那么怎么营造这样子的环境呢? 一.首先需要控制网络,有两种方式其一使用网络损伤仪进行,其二采用软件方式.硬件采购费用太贵,因此使用win平台 ...
- MySQL != 失效
字段中包含 NULL 和 其他字符串值时, 字段既包含 NULL 也有字符串类型的值, 使用如下 SQL 无法获取值为 NULL 的部分 SELECT * FROM table_name WHERE ...
- Leetcode 648.单词替换
单词替换 在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词--我们称这个词为 继承词(successor).例如,词根an,跟随着单词 other(其他),可 ...