• NYOJ 745 蚂蚁的难题(二)


    蚂蚁的难题(二)

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
     
    描述

    下雨了,下雨了,蚂蚁搬家了。

    已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈。小蚂蚁对每种食材都有一个喜爱程度值Vi,当然,如果Vi小于0的时候,表示蚂蚁讨厌这种食材。因为马上就要下雨了,所以蚂蚁只能搬一次,但是能够搬走连续一段的食材。时间紧急,你快帮帮小蚂蚁吧,让它搬走的食材喜爱值和最大。

     
    输入
    有多组测试数据(以EOF结尾)。
    每组数据有两行,第一行有一个n,表示有n种食材排成了一个圈。(1 <= n<= 50000)
    第二行分别有n个数,代表蚂蚁对第n种食材的喜爱值Vi。(-10^9 <= Vi <= 10^9)
    输出
    输出小蚂蚁能够搬走的食材的喜爱值总和的最大。
    样例输入
    3
    3 -1 2
    5
    -8 5 -1 3 -9
    
    样例输出
    5
    7
    来源
    蚂蚁系列
    上传者
    ACM_李如兵



    解题:环形最大子序列


     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <vector>
     6 #include <climits>
     7 #include <algorithm>
     8 #include <cmath>
     9 #define LL long long
    10 using namespace std;
    11 LL d[50010];
    12 int main() {
    13     int n,i;
    14     LL u,v,x,y,sum;
    15     while(~scanf("%d",&n)) {
    16         u = INT_MIN;
    17         v = INT_MAX;
    18         x = y = 0;
    19         for(sum = i = 0; i < n; i++){
    20             scanf("%lld",d+i);
    21             sum += d[i];
    22             
    23             if(x >= 0) x += d[i];
    24             else x = d[i];
    25             u = max(u,x);
    26 
    27             if(y <= 0) y += d[i];
    28             else y = d[i];
    29             v = min(v,y);
    30         }
    31         printf("%lld
    ",max(u,sum-v));
    32     }
    33     return 0;
    34 }
    View Code
    
    
    
     
  • 相关阅读:
    VC++以及VS个版本比较 及 C++编译器比较
    这本书的封面
    json_encode(),json_deocde()用法说明
    循环匹配,一般用于多选列表选中状态
    js判断变量是否被定义
    js onload()事件调用方法
    js push使用方法
    iframe去掉边滚动条
    ajax上传文件(使用ajaxfileupload)
    基于url的权限控制
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/3849798.html
Copyright © 2020-2023  润新知