1282: ykc想吃好吃的
时间限制: 1 秒 内存限制: 128 MB | 提交: 728 解决: 99
题目链接:http://172.18.66.54:50015/JudgeOnline/problem.php?id=1282
题目描述
一天,ykc在学校闲的无聊,于是决定上街买点吃的,ykc很懒,本来就不是很像逛街,于是找来了czl帮他买,这里应该有滑稽,而czl也不愿为ykc买东西吃,但是ykc很强势,非让他去买,呢没办法了,然而czl还有很多事要做,没呢么多时间帮ykc,而这条小吃街又很长,有n家店,n有50000这么大,并且这n家店的商品价值有所不同(要知道,商品的价值可能为负,哈哈,很神奇吧,但是czl肯定不会傻到赔钱,所以你懂的),哇,czl要疯了,他不想逛这么久啊,他还有个毛病,他只会连续的逛若干家店,并且由于这条街的店很多,所以肯定不会是一条直线,换句话说就是首尾相连,即第n家店和第一家店是连在一起的,然而ykc希望czl买的东西价值最大,不然就会不开心,于是他就把艰难的任务交给你了,他真的不想浪费时间,你能帮助他吗?
输入
第1行:小吃街的长度N(2 <= N <= 50000)
第2 - N+1行:N个整数,代表每个店的商品价值 (-10^9 <= S[i] <= 10^9)
第2 - N+1行:N个整数,代表每个店的商品价值 (-10^9 <= S[i] <= 10^9)
输出
czl能买到的最大价值
样例输入
6
-2 11 -4 13 5 -2
样例输出
25
思路: 环装最大连续字段和
<1> 正环最大连续字段和 <2> 反环最大连续字段和 比较去最大
#include<cstdio> #define maxn 50000+100 typedef long long LL ; LL num[maxn] ; int n ; LL sum , result ; LL maxnum(LL *a){ LL k = 0 , ans1=0 ; for(int i=0 ; i<n ; i++){ if(k<0) k=0 ; k+=num[i] ; if(k>ans1) ans1 = k ; } return ans1 ; } int main(){ while(~scanf("%d" , &n)) { for(int i=0 ; i<n ; i++){ scanf("%lld" , &num[i]) ; sum+=num[i] ; } LL flag = maxnum(num) ; for(int i=0 ; i<n ; i++) num[i] = -num[i] ; LL flag2 = maxnum(num) ; result = flag>flag2+sum?flag:flag2+sum ; // 求出的反环最大连续子段和 在原环中是最小的负数或者0 printf("%lld " , result) ; } return 0 ; } /************************************************************** Problem: 1282 User: 201616040106 Language: C++ Result: 正确 Time:16 ms Memory:1480 kb ****************************************************************/
/*同时求最大连续子段和 与 最小连续子段和 */
#include<stdio.h> #include<algorithm> using namespace std; int main() { int n; while(~scanf("%d",&n)) { long long summax=0; long long summin=0; long long summx=0,summn=0,sum=0; int num[50005]; for(int i=0;i<n;i++) { scanf("%d",&num[i]); sum+=num[i]; } for(int i = 0 ; i < n ; i++) { summx+=num[i]; summn+=num[i]; summax=max(summax,summx); summin=min(summin,summn); if(summx<0) summx=0; if(summn>0) summn=0; } printf("%lld ",max(summax,sum-summin));// 求出的最小值 是负数或者 0 } return 0; } /************************************************************** Problem: 1282 User: 52lemon Language: C++ Result: 正确 Time:8 ms Memory:1168 kb ****************************************************************/