zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    用谷歌浏览器来模拟手机浏览器
    手机端网页设计尺寸,手机端网页设计图片尺寸
    响应式web网站设计制作方法
    css3媒体查询实现网站响应式布局
    MVC框架是什么
    ExecutorService与ThreadPoolTaskExecutor
    JSONObject、JSONArray区别
    redis 的理解
    redis 下载及使用
    springBoot上传文件大小设置
  • 原文地址:https://www.cnblogs.com/--ZHIYUAN/p/6723897.html
Copyright © 2011-2022 走看看