Problem 1478 环形整数串 from http://acm.fzu.edu.cn/problem.php?pid=1478

 Problem Description

你知道最大和子串问题么? 就是给你一个整数串,要你求出其中的一个连续子串,要求其和最大。

比如: 串是 -2 2 0 1 -48 1,显然其最大和连续子串是2 0 1,其和是3。

现的问题是如果求环形整数串的最大连续和子串呢?

请编写一个程序解决这个问题。

 Input

本题有多组输入数据,你必须处理到EOF为止

每组数据的第一行有一个整数n, (1<=n<=1000000).第2行有n个整数,每个整数都在[-100,100]的范围内

 Output

每组数据输出一个整数,表示环形整数串最大连续子串和。

 Sample Input

6-2 3 0 1 -48 8021 3

 Sample Output

824

 Source

FOJ月赛-2007年3月
需要注意当min=sum时,sum-min是没有东西的。




[cpp]  view plain copy
  1. #include <iostream>  
  2. #include <algorithm>  
  3. #include <cstdio>  
  4. using namespace std;  
  5. int main(){  
  6.   
  7.     //freopen("in.txt", "r", stdin);  
  8.   
  9.     long long sum;  
  10.     long long max;  
  11.     long long smax;  
  12.     long long smin;  
  13.     long long min;  
  14.     int num;  
  15.     int n;  
  16.   
  17.     while(cin>>n){  
  18.         scanf("%d", &num);  
  19.         smax = num;  
  20.         max = num;  
  21.         smin = num;  
  22.         min = num;  
  23.         sum = num;  
  24.         for(int i=1;i<n;++i){  
  25.             scanf("%d", &num);  
  26.   
  27.   
  28.             sum += num;  
  29.   
  30.             smax = smax>0?smax+num:num;  
  31.             smin = smin<0?smin+num:num;  
  32.   
  33.             if(smax>max){  
  34.                 max = smax;  
  35.             }  
  36.             if(smin<min)  
  37.                 min = smin;  
  38.   
  39.         }  
  40.   
  41.         if(sum-min>max && sum!=min)  
  42.             cout<<sum-min<<endl;  
  43.         else  
  44.             cout<<max<<endl;  
  45.     }  
  46.   
  47.     //fclose(stdin);  
  48.     return 0;  
  49. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值