C 求相邻元素不超过k个的数组元素最大和的算法

C 求相邻元素不超过k个的数组元素最大和的算法,c,algorithm,C,Algorithm,嗨, 我遇到了这个问题。给定一个仅包含正值的数组。您需要找到通过添加元素可以得到的最大和。条件是拾取的相邻图元不能超过k个。我的简单解决办法是 此解决方案并非在所有情况下都能产生正确的输入。我不知道为什么。 有人能帮忙吗?谢谢。在代码中,您只需跳过每个k+1th元素。有时候,最好跳过更多的元素,但要明智地去做。(选择要跳过的最低数字等) 编辑:一些简单的递归解决方案:(这不是有效的,但会起作用) long maxsum(int n,int k,long*利润){ 长和=0,最大值=0,cu

嗨, 我遇到了这个问题。给定一个仅包含正值的数组。您需要找到通过添加元素可以得到的最大和。条件是拾取的相邻图元不能超过k个。我的简单解决办法是



此解决方案并非在所有情况下都能产生正确的输入。我不知道为什么。
有人能帮忙吗?谢谢。

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

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

long maxsum(int n,int k,long*利润){
长和=0,最大值=0,cur;
int i;

如果(我找出了距离k的数字,得到了最小和。然后我从总和中减去了这个最小和。这就是我所做的。我注意到我们可以存储每个索引返回的最大和,以找到下一个索引的最大值。这是我尝试的。我注意到每个索引的最大值都可以存储和使用。)计算其他人的最大值。这是我做的。但这不够快。有什么想法吗
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;
}