相关疑难解决方法(0)

用于找到阵列中元素的最大总和的算法,使得不超过k个元素是相邻的

我遇到了这个问题.给定一个仅包含正值的数组,您希望在约束条件下最大化所选元素的总和,使得多于k个选定元素的组不相邻.例如,如果输入是1 2 3 1 7 9(n = 6且k = 2).输出将是21,它来自挑选元素_ 2 3 _ 7 9.我的简单DP解决方案就是这个

#include<stdio.h>
#include<limits.h>
#include<malloc.h>


long maxsum(int n,int k,long *sums){
    long *maxsums;
    maxsums = malloc(sizeof(long)*n);
    int i;
    long add  = 0;
    for(i=n-1;i>=n-k;i--){
        add += sums[i];
        maxsums[i] = add;
    }

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

int main(){
    int …
Run Code Online (Sandbox Code Playgroud)

c algorithm dynamic-programming

8
推荐指数
1
解决办法
2848
查看次数

标签 统计

algorithm ×1

c ×1

dynamic-programming ×1