【hpuoj】循环数组最大子段和
来源:互联网 发布:淘宝亚瑟士全是假的 编辑:程序博客网 时间:2024/06/05 20:06
1082: 循环数组最大子段和 [DP]
时间限制: 1 Sec 内存限制: 128 MB提交: 19 解决: 6 状态
题目描述
KACA在做了最大子段和问题之后,思考若数组可以首尾相接的话最大子段和应该是多少。
输入
有多组测试数据。
每一组的第一行是一个整数
下面一行是
输出
对于每一组数据,输出当数组可以首位相接时的最大子段和,占一行。
样例输入
6-1 4 -1 -5 5 1
样例输出
9
来源
BoilTask
一个经典的入门DP;51Nod算法课程里的模板题;
这道题跟最大连续子段和有区别在这里涉及了循环数组,那么考虑一下其实这题求的是数组中的最小连续子段和。
然后sum减去最小连续子段和就是循环数组的最大连续子段和。
思路早就有了不过不知道为啥一直不过……
#include<cstdio> #include<algorithm>#include<string.h>using namespace std;int n;typedef long long ll;ll a[50010];int main(){ while(~scanf("%d",&n)){ ll sum=0; for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); sum+=a[i]; } ll su=0; ll su1=0; ll ma=0; ll ma1=0; for(int i=1;i<=n;i++){ if(su<=0){ su=a[i]; if(su>ma){ ma=su; } } else{ su+=a[i]; if(su>ma){ ma=su; } } if(su1<=0){ su1=-a[i]; if(su1>ma1){ ma1=su1; } } else{ su1+=(-a[i]); if(su1>ma1){ ma1=su1; } } } printf("%lld\n",max(ma,sum-(-ma1))); } return 0;}
0 0
- 【hpuoj】循环数组最大子段和
- DP-循环数组最大子段和
- 循环数组的最大子段和
- 循环数组的最大子段和
- 1050 循环数组最大子段和
- 1050 循环数组最大子段和
- 循环数组最大子段和
- 1050 循环数组最大子段和
- 循环数组的最大子段和
- 循环数组最大子段和
- 循环数组最大子段和
- 1050 循环数组最大子段和
- 循环数组最大子段和
- 循环数组最大子段和 (dp)
- 循环数组最大子段和
- 循环数组最大子段和
- 【循环数组最大子段和】51nod 1050 循环数组最大子段和
- 51Nod 1050 循环数组最大子段和(DP—最大子段和变形)
- CountDownLatch 多线程同步辅助类用法
- Intellij IDEA调试功能使用总结
- iOS 中文转UTF-8编码
- 有关localStorage的一个小demo
- C/C++ 哈夫曼树的构造、编码以及译码
- 【hpuoj】循环数组最大子段和
- 2017随想
- C#多线程同步(九)【volatile】
- HBase 常用Shell命令
- 关于百度地图动态事件调用的使用
- OpenGL: 纹理映射中的双线性插值
- 从法律角度解析不良资产
- 设置Bioconductor和CRAN mirror,加快程序包安装速度
- 在RHL中搭建、配置和试用svn的实践记录