蚂蚁的难题(二)
来源:互联网 发布:软件版本如何定义 编辑:程序博客网 时间:2024/04/28 14:51
蚂蚁的难题(二)
时间限制: 1 Sec 内存限制: 128 MB提交: 3 解决: 2
[提交][状态][论坛]
题目描述
下雨了,下雨了,蚂蚁搬家了。
已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈。小蚂蚁对每种食材都有一个喜爱程度值Vi,当然,如果Vi小于0的时候,表示蚂蚁讨厌这种食材。因为马上就要下雨了,所以蚂蚁只能搬一次,但是能够搬走连续一段的食材。时间紧急,你快帮帮小蚂蚁吧,让它搬走的食材喜爱值和最大。
输入
有多组测试数据(以EOF结尾)。
每组数据有两行,第一行有一个n,表示有n种食材排成了一个圈。(1 <= n<= 50000)
第二行分别有n个数,代表蚂蚁对第n种食材的喜爱值Vi。(-10^9 <= Vi <= 10^9)
输出
输出小蚂蚁能够搬走的食材的喜爱值总和的最大。
样例输入
33 -1 25-8 5 -1 3 -9
样例输出
57
提示
这题是最大字段和的变形,关键的地方是数据可以循环,分两步解决:
第一步,求出这组数据的首尾不循环的最大字段和s1
第二步,这个可以在第一步的时候,求出他的最小字段和s2,还有全部数据之和s,那么,根据题目的要求,将s1与s-s2的值比较就可以得到最后的结果。
#include<cstdio>
#include<iostream>
#include<string.h>
using
namespace
std;
long
long
a[50010];
int
main()
{
int
n;
long
long
sum,c,x1,x2,s1,s2;
while
(
scanf
(
"%d"
,&n)!=EOF){
for
(
int
i=0;i<n;i++)
scanf
(
"%lld"
,&a[i]);
sum=0;s1=a[0];s2=a[0];x1=0;x2=0;
for
(
int
i=0;i<n;i++){
if
(x1>0)x1+=a[i];
else
x1=a[i];
s1=max(s1,x1);
if
(x2<=0)x2+=a[i];
else
x2=a[i];
s2=min(x2,s2); //注意
sum += a[i];
}
printf
(
"%lld\n"
,max(s1,sum-s2));
}
return
0;
}
0 0
- 蚂蚁的难题(二)
- 蚂蚁的难题(二)
- 蚂蚁的难题(二)
- 蚂蚁的难题(二)
- 蚂蚁的难题(二)
- 蚂蚁的难题(二)
- nyoj745-蚂蚁的难题(二)
- 蚂蚁的难题(二)
- 蚂蚁的难题系列--二
- nyoj745_蚂蚁的难题(二)
- 蚂蚁的难题(二)
- NYOJ - 蚂蚁的难题(二)(dp)
- NYOJ 745 蚂蚁的难题(二)
- NYOJ745-蚂蚁的难题(二)
- Nyoj 745 蚂蚁的难题(二)
- NYOJ 745 蚂蚁的难题(二)
- NYOJ 745 蚂蚁的难题(二)
- NYOJ 745 蚂蚁的难题(二)
- Android--应用Crash处理
- 因百度空间关闭,从现在开始,我就使用本CSDN博客作为主博客
- PHP - 开发时常用的设计模式
- php 策略模式
- git 安装(一)
- 蚂蚁的难题(二)
- 多个线程同时开始启动计时框架的设计与实现
- IntelliJ Idea + Maven + Junit
- Discuz数据获取操作
- nyoj 最强DE 战斗力 (数论入门)
- Xamarin.Forms入门困扰与解决方式-No.4
- 网络爬虫Java实现原理
- ubuntu技巧--ubuntu下搜狗输入法的设置
- Linux 的源码安装工具 CheckInstall