• 最大连续子数列和


    最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大。

    8
    -2 6 -1 5 4 -7 2 3
    第一行的8是说序列的长度是8,然后第二行有8个数字,即待计算的序列。
    对于这个序列,我们的答案应该是14,所选的数列是从第2个数到第5个数,这4个数的和是所有子数列中最大的。

    分析:动态规划,保证每到一个位置,该位置的和要么为当前值,要么加上前一组数的最大和

    //最大连续子数列和
    #include<iostream>
    #include<cstring>
    using namespace std;
    int n;
    int main()
    {
        while(cin>>n){
            int a[n];
            for(int i=0;i<n;i++) cin>>a[i];
            int b[n];
            memset(b,0,sizeof(b));
                    for(int i=1;i<n;i++) cout<<b[i]<<" ";
                    cout<<endl;
                    b[0]=a[0];
            for(int i=1;i<n;i++){
                if(b[i-1]>0) b[i]=b[i-1]+a[i];
                else b[i]=a[i]; 
            }
            for(int i=1;i<n;i++) cout<<b[i]<<" ";
            cout<<endl;
        }
    } 
    View Code
  • 相关阅读:
    解决android.os.NetworkOnMainThreadException
    android 模拟器对应键盘快捷键
    Android上解析Json格式数据
    命令行的由来
    Linux测网速
    cacti
    判断端口是否开放
    Linux中运行c程序,与系统打交道
    python 多线程
    Leetcode 编程训练(转载)
  • 原文地址:https://www.cnblogs.com/helloworld2019/p/10395037.html
Copyright © 2020-2023  润新知