首尾相连数组的最大子数组和

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
 
描述
给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选)。
 
输入
输入包含多个测试用例,每个测试用例共有两行,第一行是一个整数n(1=<n<=100000),表示数组的长度,第二行依次输入n个整数(整数绝对值不大于1000)。
输出
对于每个测试用例,请输出子数组和的最大值。
样例输入
6
1 -2 3 5 -1 2
5
6 -1 5 4 -7
样例输出
10
14 解题思路:最开始自己想了一种方法,将数组延伸到2n-1,即a[i+n]=a[i].然后按照求最大子串和来求解,但是交上去错了,后来找到数据发现,如果出现中间的一段序列为负值,但是不会使累加的那个tmp值为负,则计算出的结果是原串的最大子串和,跟自己构造的那个串没关联。然后参考别人的思路,即:1.如果最大的子串和在原串中,则求出原串的最大子串和的值就是结果 2.如果最大的子串和序列包含跨越了尾部跟头部的序列,则用总的串和减去原串中的最小的子串和即为结果。
#include<bits/stdc++.h>
using namespace std;
#define mmax(a,b) (a)>(b)?(a):(b)
const int maxn=200100;
const int INF=1e9;
int main(){
// freopen("Input.txt","r",stdin);
// freopen("OUT.txt","w",stdout);
int t,n,tm,ans,i,j,k,m,sum,a;
while(scanf("%d",&n)!=EOF){
sum=0;
int Min,Max,tin,tax;
Max=-INF;
Min=INF;
tin=tax=0;
for(i=0;i<n;i++){
scanf("%d",&a);
sum+=a;
tin+=a;
tax+=a;
if(tin<Min){
Min=tin;
}
if(tax>Max){
Max=tax;
}
if(tax<0){
tax=0;
}
if(tin>0){
tin=0;
}
}
// printf("%d %d\n",Min,Max);
printf("%d\n",mmax(sum-Min,Max));
}
return 0;
}

  

nyoj 983 ——首尾相连数组的最大子数组和——————【最大子串和变形】的更多相关文章

  1. NYOJ 745 首尾相连数组的最大子数组和

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首 ...

  2. 蚂蚁的难题(二)首尾相连数组的最大子数组和(DP)

    蚂蚁的难题(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 下雨了,下雨了,蚂蚁搬家了. 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈.小蚂蚁对每种食材 ...

  3. nyoj983 首尾相连数组的最大子数组和

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...

  4. nyoj--983--首尾相连数组的最大子数组和(动态规划)

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...

  5. 求一个数组的最大子数组(C/C++实现)

    最大子数组:要求相连,加起来的和最大的子数组就是一个数组的最大子数组.编译环境:VS2012,顺便说句其实我是C#程序员,我只是喜欢学C++. 其实这是个半成品,还有些BUG在里面,不过总体的思路是这 ...

  6. 求解数组环中最大子数组和的问题(java)

    //石家庄铁道大学 信1405-1 班 唐炳辉 在上一次作业中,对于普通数组的最大子数组的求解问题的基础上,将普通的数组变成一个首尾相接的环,求这个环的最大子数组.类似的,只要改变普通数组的数组位置, ...

  7. 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...

  8. [Jobdu] 题目1527:首尾相连数组的最大子数组和

    题目描述: 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr ...

  9. Task 4.3 求环形数组的最大子数组和

    任务要求:输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.    如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n- ...

随机推荐

  1. Socket网络通讯

    网络编程 使用C#进行网络编程时,通常都需要用到System.Net命名空间.System.Net.Sockets命名空间和System.Net.Mail命名空间: 1. System.Net命名空间 ...

  2. EFCore扩展Update方法(实现 Update User SET Id=Id+1)

    EFCore扩展Update方法(实现 Update User SET Id = Id + 1) 源码地址(github) 前言 EFCore在操作更新的时候往往需要先查询一遍数据,再去更新相应的字段 ...

  3. asp.net站点阻止某个文件夹或者文件被浏览器访问

    一个站点根目录下面有一个Config文件夹,这个文件夹里面都是一些json格式的txt文本,文本是一种静态资源,如果知道这个文本的地址,就可以在浏览器中输入地址打开这个文本,别人就可以看到站点的配置, ...

  4. 十六、Node.js-fs模块-流

    10. fs.createReadStream 从文件流中读取数据 /** * 之前我们学习过读取文件内容的方法readFile():该方法适合读取文件内容比较少的文件,如果遇到数据量庞大的文件,我们 ...

  5. linux------深入理解linux内核

    linux内核用到了很多数据结构,这些数据结构都是为了提高某些方面的效率. 内核分配给进程的虚拟地址空间由以下内存区组成: 程序的可执行代码 程序的初始化数据 程序的未初始化数据 初始程序栈(即用户态 ...

  6. windows10 docker 使用以及虚拟机下fastDFS 的使用教程

    我们 先来了解下 什么是docker?   Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来.并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相 ...

  7. 【bzoj4007】[JLOI2015]战争调度 暴力+树形dp

    Description 脸哥最近来到了一个神奇的王国,王国里的公民每个公民有两个下属或者没有下属,这种 关系刚好组成一个 n 层的完全二叉树.公民 i 的下属是 2 * i 和 2 * i +1.最下 ...

  8. 洛谷P3356 火星探险问题(费用流)

    传送门 和深海机器人问题差不多……看到有的大佬是用dp过的,强无敌…… 考虑一下,把每一个点拆点,分别是$A_i$和$B_i$,连一条容量为$inf$,费用为$0$的边,表示可以随便走.如果有石头,再 ...

  9. 二分查找法C语言实现

    [问题描述] 生成一个随机数组A[64] ,在数组中查找是否存在某个数num. [答案] #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> ...

  10. 如果你是后台开发者,InnoDB的小秘密,你应该知道

    InnoDB简述 InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购.InnoDB支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL. 当 ...