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 doc形成注释文档
    linux中rz、sz命令,zip、unzip命令,sqlite3基本操作
    hash应用-加随机盐保存密码
    非对称/对称加密算法,hash算法
    自签名的应用--数字货币
    HTTPS原理
    Django中app的model相互引用问题
  • 原文地址:https://www.cnblogs.com/yingni/p/11707369.html
Copyright © 2011-2022 走看看