找到元素数组的最大和的算法,使得不超过k个元素是相邻的

时间:2012-02-12 00:23:26

标签: c algorithm


您好,   我遇到了这个问题。给定一个只包含正值的数组。您需要找到添加元素可能产生的最大总和。条件是你不能选择超过k个相邻元素。我的简单解决方案是


http://pastebin.com/s4KxjQRN


此解决方案在所有情况下都不会产生正确的输入。我无法弄清楚原因。 任何人都可以帮忙吗?谢谢。

1 个答案:

答案 0 :(得分:1)

在您的代码中,您只需跳过每个k+1元素。有时候,最好跳过更多元素,但明智地做。 (选择要跳过的最小数字等)

编辑:一些简单的递归解决方案:(它没有效果,但会起作用)

long maxsum(int n,int k,long *profits) {
    long sum=0,max=0,cur;
    int i;
    if (n<=k) {
        for (i=0;i<n;i++) sum+=profits[i];
        return sum;
    }
    for (i=0;i<=k;i++) {
        cur=sum+maxsum(n-i-1,k,profits+i+1);
        if (cur>max) max=cur;
        sum+=profits[i];
    }
    return max;
}