從數列a[0], a[1], a[2], …, a[n-1]中選若干個數,要求相鄰的數不能都選,也就是說如果選了a[i], 就不能選a[i-1]和a[i+1]. 求能選出的最大和.
1 <= n <= 100000, 1 <= a[i] <= 1000
請為下面的solution類實現解決上述問題的函式maxsum,函式引數a是給出的數列,返回值為所求的最大和.
class solution
};
例1:a = ,答案為5.
例2:a = ,答案為6.
本題考查動態規劃,要求找出能得到最大和的選擇方法。設定兩個陣列用於儲存不同的選擇情況。
將題目給的陣列遍歷一次;
陣列a儲存的是不選擇當前這個數時的總和;因為不選當前的數字,所以前乙個數字可選也可以不選,取總和較大的情況即可。(即max(a[i - 1], b[i- 1])
陣列b儲存的是選擇當前這個數時的總和;所以前乙個數字必定沒有選,即總和為b[i] = a[i - 1] + a[i];
最後的結果從a[s -1],b[s - 1]中選出較大的乙個即可。
class solution
return max(a[s - 1], b[s - 1]);
}};
Sicily 會議安排 演算法期末機考模擬題
n個會議要同時舉行,參會人數分別為a 0 a 1 a n 1 現有m個會議室,會議室可容納人數分別為b 0 b 1 b m 1 當a i b j 時,可以把會議i安排在會議室j,每間會議室最多安排乙個會議,每個會議最多只能安排乙個會議室.求最多安排多少個會議.1 n,m 100000,每個會議的參會...
關於子串行最大和的幾種演算法
所謂最大子列和,就是給出乙個序列,找到其中一段連續的子串行,並且該子串行的和最大。如序列 2 3 1 5 5 3 3 顯然該序列子串行 2 3 1 有最大和 6 今天,說三種方法來求解此問題。一,最笨的一種方法 include int main void if s max max s printf ...
演算法總結 DP 求子陣列的最大和
快要畢業了,逐步把之前做過的一些演算法和資料結構,專案相關資料總結整理一下,一來溫習一下之前的知識,二來記錄下學習點滴,方便之後的學習。plain view plain copy print?題目描述 給定乙個整數陣列,陣列中有正數也有負數,陣列中連續的乙個或者多個整數組成乙個子陣列,每個子陣列都有...