2012-02-12 5 views
-3

こんにちは、 私はこの質問に出会いました。正の値のみを含む配列が与えられます。要素を追加することによって最大合計を見つける必要があります。条件は、隣接するk個以上の要素を選択できないことです。私の簡単な解決策は、すべてのケースで正しい入力を生成しません。このk個以下の要素が隣接しないような要素配列の最大和を求めるアルゴリズム


​​


この解決策です。なぜ私は理解できません。 誰でも助けてくれますか?ありがとうございました。

+0

あなたはこれまでに何をしましたか? –

+0

私はkの距離にある数を見つけ、最小合計を生成します。それから、総和からこの最小合計を引いただけです。これは私がやったことです。 – vgeta

答えて

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

次のインデックスの最大値を見つけるために各インデックスで返された最大合計を保存できることに気付きました。私が試したものはここにあります.. – vgeta

+0

私は、各インデックスまでの最大値を保存し、othersの最大値を計算するために使用できることに気付きました。これは私が行ったことです.. http://pastebin.com/zJ36YmLgしかしこれは高速ではありません十分な..任意のアイデア – vgeta

関連する問題