zoukankan      html  css  js  c++  java
  • 算法第三章上机实践报告

    7-2 最大子段和

    给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。

    要求算法的时间复杂度为O(n)。

    输入格式:

    输入有两行:

    第一行是n值(1<=n<=10000);

    第二行是n个整数。

    输出格式:

    输出最大子段和。

    输入样例:

    在这里给出一组输入。例如:

    6
    -2 11 -4 13 -5 -2

    输出样例:

    在这里给出相应的输出。例如:

    20

    最大子段和问题的动态规划算法分析

    完整代码

    #include <iostream>
    using namespace std;
    
    const int MAX = 10000;
    int B[10000];
    int maxSum (int* a , int n);
    
    int main() {
        int num = 0;
        cin >> num;
        for (int i = 0 ; i < num ; i ++ ) {
            cin >> B[i];
        }
    
        cout << maxSum(B , num);
        return 0;
    }
    
    
    int maxSum (int* a , int n) {
        int temp = 0;
        int sum = 0;
        for (int i = 0 ; i < n ; i ++ ) {
            temp = (temp + a[i]) > a[i] ? (temp + a[i]) : a[i];
            if (temp > sum)
                sum = temp;
        }
    
        return sum;
    }

     空间复杂度分析与体会

    空间复杂度为O(n)。

    如果问题满足优化原则或者最优子结构性质。即:一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列,就可以考虑使用该算法。其中的关键是能否找到该问题的递推方程式。

  • 相关阅读:
    Java生产者与消费者(下)
    Java生产者与消费者(上)
    Java中的继承和接口
    syslog(),closelog()与openlog()--日志操作函数
    Nagle算法
    TCP_NODELAY详解
    Linux "零拷贝" sendfile函数中文说明及实际操作分析
    pdflush的工作原理
    proc/sys/net/ipv4/下各项的意义
    求最低价格
  • 原文地址:https://www.cnblogs.com/yingni/p/11707369.html
Copyright © 2011-2022 走看看