题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050

思路解析:一开始想着直接将长度为n的数组延长至2n-1,然后对该串数组依次取n次长度为n的b[],在接着进行普通的数组最大字段和运算,结果很显然:时间超限,因此想了一下换了个想法,可不可以同样运用普通的求数组最大字段和方式但是换个方式,以下便是正确的AC思路:

段和?拿一组数组比较a[]={3,-5,-6,1,-2,6},当求普通的最大字段和答案为6,当求循环数组最大字段和时为8.如果正确答案是在首尾处得出,那么将非首尾处的数进行去掉得出首尾处的和即为最大字段和。比如在这段测试数据中最大字段和应为{6,3},(首尾处),现今只需将其他各项除去即可。所以思路就是将所有的数字进行取反,求出取反后的最大值,因为原始数组的所舍弃的数字加起来就是最小值,取反后得到的和就是最大值max2,现今将原先数组相加得到的和sum与max2进行相加得到的便是首尾处的最大值,然后在和假使循环数组最大字段和的最大值不在首尾处取得最大值的max1进行比较,所得到的最大值就是题目的正确答案(循环数组最大字段和)

#include<stdio.h>
int main(){long long n,m,i,j,k,max,sum,a[50005],b[50005],max1,max2,Sum1,Sum2;scanf("%lld",&n);sum=0;Sum1=0,Sum2=0,max1=max2=0;for(i=0;i<n;i++){scanf("%lld",&a[i]);b[i]=-a[i];sum+=a[i];}for(int i=0;i<n;i++){Sum1+=a[i];if(Sum1>max1)max1=Sum1;if(Sum1<0){Sum1=0;}}for(int i=0;i<n;i++){Sum2+=b[i];if(Sum2>max2)max2=Sum2;if(Sum2<0){Sum2=0;}    }    max2=sum+max2;if(max1>max2)max=max1;else max=max2;printf("%lld\n",max);return 0;
} 如有不足请多多指教如有疑问请相互探讨

转载于:https://www.cnblogs.com/ZHOUXIAOHAO/p/5861836.html

51nod 1050循环数组最大字段和相关推荐

  1. 51nod 1050 循环数组最大子段和【环形DP/最大子段和/正难则反】

    1050 循环数组最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该 ...

  2. 51Nod 1050 循环数组最大子段和

    有两种方式: 1.在首尾之间 2.在尾首之间 对于第一种直接来dp就好,第二种需要将其数组全部取负,然后取到其最大值(肯定是负数的最大值)然后dp即可,最后比较这两个答案谁比较大就输出哪个 1 #in ...

  3. 1050 循环数组最大子段和

    1050 循环数组最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该 ...

  4. 循环数组最大字段和(51Nod-1050)

    题目 N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a ...

  5. 51Nod-1050 循环数组最大段和【最大子段和+最小子段和+DP】

    1050 循环数组最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+ ...

  6. 【51nod - 1050】循环数组最大子段和(dp)

    题干: N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1], ...

  7. 【C++算法与数据结构学习笔记------用循环数组实现队列】

    照王晓东<数据结构>(C++语言版)上打的,以备留用. 1 #include <iostream> 2 using namespace std; 3 template<t ...

  8. 循环数组的最大子段和

    问题描述: N个整数组成循环序列,求这个序列的最大子段和. 例如:-2   11  -4  13  -5  -2    ANSWER: 20 解决: 解决这个问题需要有求解最大子段和的基础. 循环数组 ...

  9. 力扣【下一个更大元素】leetcode-503.下一个更大元素 Ⅱ:单调栈解法+循环数组解法

    题目: 思路与解法: 1.如果是暴力法,只需要遍历就可以了,但是那样的话时间复杂度就是O(N^2); 2.可以把这几个数字,抽象成为高度不一样的柱子: 3.寻找的过程,就是从当前柱子去看,被后面的哪一 ...

最新文章

  1. LINUX不能ping域名, 能ping ip, 添加DNS解析
  2. Intellij IDEA Debug 调试技巧
  3. 音视频开发基础概述 - PCM、YUV、H264、常用软件介绍
  4. python def method_给python类动态添加方法(method)
  5. 破解SQLSERVER存储过程的加密
  6. dataframe 如何选中某列的一行_如何用 Python 在笔记本上分析 100GB 数据?
  7. 树视图的代码 TreeView
  8. 轻博客:企业品牌互动传播利器
  9. linux x64系统android开发环境搭建
  10. 天池实验室-Task01-Python入门(上)
  11. pytorch安装换源ubuntu_PyTorch入门之PyTorch的安装
  12. HTML5 WebSocket
  13. oozie mysql5.6_oozie服务安装及使用
  14. 郑捷《机器学习算法原理与编程实践》学习笔记(第六章 神经网络初步)6.3 自组织特征映射神经网路(SOM)...
  15. 1074: 百钱买百鸡
  16. 计算机维修实操,wt初级计算机维修工操作题(二).doc
  17. ASO代理业务浅析(一)aso服务商
  18. HTML爱心网页制作(带文字)
  19. UEFI调试网络启动-WINDOWS搭建PXE服务器
  20. 基于高通骁龙820A的自动驾驶技术实现

热门文章

  1. DXUT实战2:HLSL(withoutEffect)+D3D9+DXUT(june_2010) .
  2. java如何多表断网,java Web如何离线使用并进行数据同步
  3. 规模大的优化mysql_十大MySQL优化技巧
  4. leetcode最大矩形_柱状图中的最大矩形
  5. linux下各种文件设备,各硬件设备在Linux中的文件名
  6. gis属性表怎么导成excel_将Excel数据导入到ArcGIS属性表
  7. 机器学习算法工程师面试经验谈:以个性化推荐算法为例
  8. vba替换字符串中的字符_R语言 | 字符串替换
  9. 电子计算机说明文作文,关于电脑说明文作文(精选3篇)
  10. Android IPC数据在内核空间中的发送过程分析