1648 最大和

时间限制: 1 s

空间限制: 256000 KB

题目等级 : 钻石 Diamond

传送门

题目描述 Description

N个数围成一圈,要求从中选择若干个连续的数(注意每个数最多只能选一次)加起来,问能形成的最大的和。

输入描述 Input Description

第一行输入N,表示数字的个数,第二行输入这N个数字。

输出描述 Output Description

输出最大和。

样例输入 Sample Input

8

2 -4 6 -1 -4 8 -1 3

样例输出 Sample Output

14

数据范围及提示 Data Size & Hint

数据说明:

40% 1<=N<=300

60% 1<=N<=2000

100% 1<= N<=100000,答案在longint范围内.

  1. /*
  2. T.
  3. 连成环啊连成环.
  4. 赶脚数据中负数应该不少.
  5. 所以复杂度在o(n^2/2)~o(n^2)之间.
  6. 然后10^10 华丽丽的T了.
  7. 10^5范围应该考虑logn,log^2n,nlogn……
  8. */
  9. #include<iostream>
  10. #include<cstdio>
  11. #define MAXN 100001*2
  12. #define LL long long
  13. using namespace std;
  14. LL f[MAXN],n,x,s[MAXN],tot=-1e18;
  15. LL read()
  16. {
  17. LL x=0,f=1;char ch=getchar();
  18. while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
  19. while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
  20. return x*f;
  21. }
  22. int main()
  23. {
  24. n=read();
  25. for(int i=1;i<=n;i++) x=read(),s[i]=s[i+n]=x;
  26. for(int i=1;i<=n;i++){
  27. if(s[i]>0)
  28. {
  29. f[i]=s[i];tot=max(tot,f[i]);
  30. for(int j=i+1;j<i+n;j++){
  31. if(f[j-1]>0) f[j]=f[j-1]+s[j];
  32. else f[j]=x;
  33. tot=max(tot,f[j]);
  34. }
  35. }
  36. tot=max(s[i],tot);
  37. }
  38. printf("%lld",tot);
  39. return 0;
  40. }
  1. /*
  2. 一开始怎么也没想到orz.
  3. 其实还是挺好想的.
  4. 答案的贡献来自于
  5. (1)连续和(不跨环).
  6. (2)连续和(跨环).
  7. 不跨环的o(n)扫一遍即可.
  8. 跨环的因为所有数的价值和是一定的
  9. 只需求出最小连续和用价值总和减掉即可(显然).
  10. 最后两者取大.
  11. */
  12. #include<iostream>
  13. #include<cstdio>
  14. #define LL long long
  15. #define MAXN 100001
  16. using namespace std;
  17. LL x,tot1,tot2,tot,n,ans1=-1e12,ans2=1e12;
  18. LL read()
  19. {
  20. LL x=0,f=1;char ch=getchar();
  21. while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
  22. while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
  23. return x*f;
  24. }
  25. int main()
  26. {
  27. n=read();x=read();
  28. tot=tot1=tot2=x;
  29. for(int i=2;i<=n;i++)
  30. {
  31. x=read();
  32. if(tot1>0) tot1+=x;
  33. else tot1=x;
  34. if(tot2<0) tot2+=x;
  35. else tot2=x;
  36. tot+=x;
  37. ans1=max(ans1,tot1),ans2=min(ans2,tot2);
  38. }
  39. printf("%lld",max(tot-ans2,ans1));
  40. return 0;
  41. }

Codevs 1648 最大和的更多相关文章

  1. 最大和(codevs 1648)

    题目描述 Description N个数围成一圈,要求从中选择若干个连续的数(注意每个数最多只能选一次)加起来,问能形成的最大的和. 输入描述 Input Description 第一行输入N,表示数 ...

  2. CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计(STL,二分)

    CJOJ 1308 [HNOI 2002 ]营业额统计 / CodeVS 1296 营业额统计(STL,二分) Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一 ...

  3. codevs 2622 数字序列

    2622 数字序列 提交地址:http://codevs.cn/problem/2622/  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold     题目描述 De ...

  4. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  5. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  6. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  7. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  8. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  9. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

随机推荐

  1. 集群搭建:主机宽带拨号上网,虚拟机使用桥接模式,该如何ping通外网

    首先介绍一下看这篇文章需要的基础.需要了解虚拟机的 虚拟机的三种网络模式,有Linux基础知识,这些都是前提.首先介绍一下我的环境:主机:win7虚拟机:VMware Workstation 10虚拟 ...

  2. github上值得关注的前端项目

    https://segmentfault.com/a/1190000002804472

  3. 【JAVA - 基础】之Annotation注解浅析

    注解在JAVA中,尤其是一些ORM框架(如Hibernate等)中是比较常用的一种机制. 注解是JAVA 1.5之后引入的新功能,正确来说是反射的一部分,没有反射,注解也就无法正常使用.注解可以理解成 ...

  4. JBPM学习(二):ProcessEngine与Service API

    1.获取processEngine的方法: a) 方法一 private ProcessEngine processEngine = new Configuration().setResource(& ...

  5. hdu 1050 Moving Tables

    http://acm.hdu.edu.cn/showproblem.php?pid=1050 这个题我首先直接用的常规贪心,用的和那个尽可能看更多完整节目那种思路.但是.......一直WA....T ...

  6. Android开发_Gson解析

    //转换器 GsonBuilder builder = new GsonBuilder(); // 不转换没有 @Expose 注解的字段 builder.excludeFieldsWithoutEx ...

  7. [GIF] Shape Objects in GIF Loop Coder

    This lesson is a quick tour of the predefined shape objects in GIF Loop Coder. function onGLC(glc) { ...

  8. java23 XML

    XML:可扩展标记语言. xml可以当成一个小型的数据库, html / \ html5 xhtml(格式比较严格) | xml xml解析方式有2种: -SAX,SAX是基于事件流的解析,事件流解析 ...

  9. java注解研究

    注解作用 常见的作用有以下几种: 生成文档.这是最常见的,也是java 最早提供的注解.常用的有@see @param @return @author等. 跟踪代码依赖性,实现替代配置文件功能.比较常 ...

  10. linux如何查进程、杀进程

    本文系转载,转载原文地址:http://blog.sina.com.cn/s/blog_637112040100vl53.html 1.查进程   ps命令查找与进程相关的PID号:   ps a 显 ...