当前位置: 首页 > news >正文

hdu1231(最大连续子序列)

最大连续子序列

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 16819    Accepted Submission(s): 7387


Problem Description
给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
子序列的第一个和最后一个元素。
 

 

Input
测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( < 10000 ),第2行给出K个整数,中间用空格分隔。当K为0时,输入结束,该用例不被处理。
 

 

Output
对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元
素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。
 

 

Sample Input
6
-2 11 -4 13 -5 -2
10
-10 1 2 3 4 -5 -23 3 7 -21
6
5 -8 3 2 5 0
1
10
3
-1 -5 -2
3
-1 0 -2
0
 

 

Sample Output
20 11 13
10 1 4
10 3 5
10 10 10
0 -1 -2
0 0 0
状态:f[i]:以i为结尾最长连续序列
状态转移:f[i]=max{f[i-1]+a[i],a[i]}
初始状态:f[1]=a[i]
要求最大的,只需从f[]找出最大值就行了
 

#include<iostream>
using namespace std;

int main()
{
    int n,i,s[10001],a[10001],f[10001],max,st,end;  //f[i]为以i为结尾最长连续序列,s[i]为其开始点
    bool flag;
    while(cin>>n&&n)
    {
        flag=0;
        for(i=1; i<=n; i++)
        {
            cin>>a[i];
            if(a[i]>=0)
                flag=1;
        }
        if(flag==0)
        {
            cout<<"0 "<<a[1]<<" "<<a[n]<<endl;
            continue;
        }
        f[1]=a[1];
        s[1]=1;
        for(i=2; i<=n; i++)
        {
            if(f[i-1]+a[i]>=a[i])
            {
                f[i]=f[i-1]+a[i];
                s[i]=s[i-1];
            }
            else
            {
                f[i]=a[i];
                s[i]=i;
            }
        }
        max=f[1];
        st=1;
        end=1;
        for(i=2; i<=n; i++)
        {
            if(f[i]>max)
            {
                max=f[i];
                st=s[i];
                end=i;
            }
        }
        cout<<max<<" "<<a[st]<<" "<<a[end]<<endl;

    }
    return 0;
}

转载于:https://www.cnblogs.com/lxm940130740/p/3560469.html

相关文章:

  • Android Studio Gradle project refresh failed No such property classpath for class
  • 给hmailserver添加DKIM签名
  • SharePoint 2013 App 示例之图片墙
  • OAuth2.0 介绍
  • CCI_Q1.7
  • 服务器安全部署文档
  • [转]How to solve SSIS error code 0xC020801C/0xC004700C/0xC0047017
  • 【VC++学习笔记三】控件自绘
  • 长沙多校联合训练
  • Windows下修改Git bash的HOME路径(转)
  • 高性能javascript学习总结(3)--数据访问
  • 灵感不断
  • 各种触摸手势
  • Java对MySQL数据库进行连接、查询和修改【转载】
  • 如何向妻子解释OOD (转)
  • 【Amaple教程】5. 插件
  • 【译】理解JavaScript:new 关键字
  • Django 博客开发教程 8 - 博客文章详情页
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • nodejs调试方法
  • Python - 闭包Closure
  • Redux 中间件分析
  • STAR法则
  • Web设计流程优化:网页效果图设计新思路
  • 给初学者:JavaScript 中数组操作注意点
  • 官方解决所有 npm 全局安装权限问题
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端技术周刊 2019-02-11 Serverless
  • 前端性能优化--懒加载和预加载
  • 如何用vue打造一个移动端音乐播放器
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 思否第一天
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 推荐一个React的管理后台框架
  • 我的业余项目总结
  • 译自由幺半群
  • 用 Swift 编写面向协议的视图
  • 《天龙八部3D》Unity技术方案揭秘
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #pragma multi_compile #pragma shader_feature
  • (C++17) optional的使用
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (一)Dubbo快速入门、介绍、使用
  • (一)python发送HTTP 请求的两种方式(get和post )
  • .a文件和.so文件
  • .gitattributes 文件
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net 验证控件和javaScript的冲突问题
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化