首页 > 其他 > 详细

【动态规划】最大子段和

时间:2014-03-29 09:05:20      阅读:312      评论:0      收藏:0      [点我收藏+]

设序列n,起始值为0

状态:s[i]是否加上dp[i - 1]

1.若前一项为正,则dp[i] = dp[i - 1] + s[i]

2.若前一项为非正,则dp[i] = s[i]

3.用max记录最大的dp[i]

bubuko.com,布布扣
#include <stdio.h>
#include <string.h>

int s[6] = { 0, 6, -1, 5, 4, -7 };
int dp[100];

int main(int argc, char *argv[])
{
    int sum = 0, max = 0;
    memset(dp, 0, sizeof(dp));

    for (int i = 1; i <= 5; i++)
    {
        if (dp[i - 1] > 0)
            dp[i] = dp[i - 1] + s[i];
        else dp[i] = s[i];
        if (dp[i] > max)
            max = dp[i];
    }

    printf("%d\n", max);
    return 0;
}
bubuko.com,布布扣

【动态规划】最大子段和,布布扣,bubuko.com

【动态规划】最大子段和

原文:http://www.cnblogs.com/Cxx-Code/p/3632082.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!