2012-02-12 89 views
-3

嗨, 我碰到过这个问题。给定一个只包含正值的数组。您需要找到添加元素可能导致的最大总和。条件是你不能选择超过k个相邻的元素。我简单的解决办法是这样的查找元素数组的最大总和的算法,使得不超过k个元素相邻


​​


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

+0

你有什么迄今所做? – 2012-02-12 00:29:25

+0

我找到了距离为k的数字,并产生最小和。然后,我只从总和中减去这个最小总和。这就是我所做的。 – vgeta 2012-02-12 00:33:05

回答

1

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

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

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; 
} 
+0

我注意到我们可以存储每个索引返回的最大和,以找到下一个索引的最大值。这里是我的尝试.. – vgeta 2012-02-21 04:49:27

+0

我注意到最大值达到每个指标可以存储和用于计算其他人的最大值。这就是我做的.. http://pastebin.com/zJ36YmLg但这不是快足够..任何想法 – vgeta 2012-02-21 04:55:32