最大子段和的动态规划法

#include <iostream>
using namespace std;


int MaxSumDyn( int array[],int len )
{
    int sum = 0;
    int b = 0;
    for ( int i = 0; i < len; ++i )
    {
        if ( b > 0 )
        {
            b += array[i];
        }
        else 
        {
            b = array[i];
        }
        if ( b > sum )
        {
            sum = b;
        }
    }
    return sum;
}


int main(int argc, char const *argv[])
{
    int array[] = {2,11,-4,13,-5,3};
    cout << MaxSumDyn(array,sizeof(array)/sizeof(array[0]))<<endl;
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最大子段和问题是一个经典的算问题,可以使用动态规划来解决。动态规划是一种将问题分解成子问题并利用子问题的解来求解原问题的方。 根据引用中的动态规划代码,我们可以看到,该代码的主要思想是通过遍历序列,计算以当前元素为结尾的子段和,并更新最大子段和以及对应的起始和结束位置。具体实现中,定义了一个辅助数组b,其中b[i表示以a[i为结尾的子段和的最大值。在遍历过程中,如果b[i-1大于0,则b[i等于b[i-1]+a[i,否则b[i等于a[i。同时,通过比较b[i和当前最大子段和的值来更新最大子段和以及对应的起始和结束位置。 引用中的代码也是使用动态规划来求解最大子段和的。在这个代码实现中,使用了一个变量sum来记录当前的子段和,并使用变量b来记录以当前元素为结尾的子段和。在遍历过程中,如果b大于0,则更新b为b+a[i,否则更新b为a[i。同时,通过比较b和sum的值来更新最大子段和的值。 引用中的代码同样使用了动态规划来解决最大子段和问题。在这个代码实现中,使用了两个数组a和b,其中a用来存储输入的序列,b用来存储以当前元素为结尾的子段和的最大值。在遍历过程中,如果当前元素为起始位置,则将b[i初始化为a[i,否则将b[i更新为a[i和b[i-1]+a[i中的较大值。通过不断更新max1来记录最大子段和的值。 综上所述,动态规划是解决最大子段和问题的常用方。通过定义辅助数组或使用变量来记录以当前元素为结尾的子段和的最大值,并通过比较更新来求解最大子段和的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [动态规划最大子段和问题C++](https://blog.csdn.net/qq_44880708/article/details/106228654)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [最大子段和动态规划C++)(计算机算设计与分析 王晓东著 第5版)](https://blog.csdn.net/Corey11/article/details/112635821)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [最大子段和动态规划)](https://blog.csdn.net/cruipeng/article/details/128365530)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值