• NYOJ 745 dp


    蚂蚁的难题(二)

    时间限制: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_李如兵
    代码:
    //环形的最大子序列。求一个首尾不连接的最大子序列和首尾不连接的最小子序列
    //那么首尾连接的最大子序列=sum-首尾不连接的最小子序列,最后输出首尾连接
    //和首尾不连接最大子序列中大的那个;
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    const int inf=0x7fffffff;
    int n,x;
    ll maxn,minn;
    int main()
    {
        while(scanf("%d",&n)==1){
            maxn=0;minn=0;
            ll f1=0,f2=0,sum=0;
            while(n--){
                scanf("%d",&x);
                sum+=x;
                if(f1>=0) f1+=x;
                else f1=x;
                maxn=max(maxn,f1);
                if(f2<=0) f2+=x;
                else f2=x;
                minn=min(minn,f2);
            }
            printf("%lld
    ",max(maxn,sum-minn));
        }
        return 0;
    }
  • 相关阅读:
    POJ题目分类(转)
    ACM训练计划建议(转)
    ACM题集以及各种总结大全(转)
    HDU 2673 (排序)
    HDU 1391 number steps(找规律,数学)
    HDU 1280 前m大的数(排序,字符串)
    HDU 1236 排名(结构体+排序)
    2015 湘潭大学程序设计比赛(Internet)H题-括号匹配
    最短路---hdu2544
    Rescue--hdu1242
  • 原文地址:https://www.cnblogs.com/--ZHIYUAN/p/6723897.html
Copyright © 2020-2023  润新知