非連続的な部分配列の最大和を求める必要があります。次のコードがあります。循環配列内の隣接していない数値の最大和
public int maxSumInSubsequence(int[] data) {
if (data == null) return 0;
int n = data.length;
// maxSum[i] == the maximum sum of subsequences of data[0 .. i] that include data[i]
int[] maxSum = new int[n];
for (int i=0; i<n; ++i) {
maxSum[i] = data[i];
// maxSum[i-1] includes data[i-1] and thus cannot include data[i]
for (int j=0; j<i-1; ++j) {
maxSum[i] = Math.max(data[i] + maxSum[j], maxSum[i]);
}
}
// find the max of all subsequences
int max = 0;
for (int i=0; i<n; ++i) {
max = Math.max(max, maxSum[i]);
}
return max;
}
これは正常に動作しますが、どのように私は、最初の計算から最後の要素を除外するように変更します。
答えはすべて正の要素の合計にすぎませんか? –
いいえ。非連続シーケンスであるため、すべての配列を集計することはできません。 – station
「不連続」とは何を意味するのかを説明します。 –