• 软件工程(2019)第三次作业


    1.题目要求

      问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n
    例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。        -- 引用自《百度百科》

    2.分析

      这道题是一个动态规划问题,可以使用分治法和递推法解决。我使用的是递推法。

    3.项目目录结构

    4.流程图

    5.源代码

    Coding地址

    • 函数源代码
    
    def deal(arrList:list)->int:
        """
        :param arrList: 传入数列,参数类型为列表
        :return:最大子数组之和
        """
        flag = True
        if len(arrList)==0:
            return 0
        for d in arrList:
            if d>0:
                flag = False
        if flag:
            return 0
    
        Max = 0;dp = 0
        for d in arrList:
            if dp>0:
                dp = dp + d
            else:
                dp = d
            if dp>Max:
                Max = dp
    
        return Max
    
    
    • 测试源代码
    import unittest
    from project1.main import deal
    
    class MyTestCase(unittest.TestCase):
        def test(self):
            self.assertEqual(deal([1,2,-1,4]), 6)
            self.assertEqual(deal([-2,11,-4,13,-20,-2]), 20)
            self.assertEqual(deal([-1,-2,-3,-4]), 0)
    
    
    
    if __name__ == '__main__':
        unittest.main()
    
    
    

    6.单元测试

      我的测试实现了条件/组合覆盖

    • 尝试条件组合覆盖集
      ① arr不合法
      ② arr合法,temp[i-1]>0,temp[i]>Max
      ③ arr合法,temp[i-1]>0,temp[i]<Max
      ④ arr合法, temp[i-1]<0,temp[i]>Max
      ⑤ arr合法, temp[i-1]<0,temp[i]<Max

    • 测试用例如下表

    测试序号 测试用例 预期结果
    [-1,-2,-3,-4] 0
    [-2,11,-4,13,-20,-2] 20
    [1,2,-1,4] 6
    • 测试结果

  • 相关阅读:
    bzoj 1103
    [POI] 大都市meg
    [Luogu] 网络
    [Luogu] 1600
    [Luogu] 树状数组
    [Luogu] 软件包管理器
    [Luogu] 遥远的国度
    [USACO5.5] 矩形周长Picture
    [Luogu] 魔板
    【NOIP2015】斗地主
  • 原文地址:https://www.cnblogs.com/Hubz131/p/10745961.html
Copyright © 2020-2023  润新知