description
n個數的序列,選出任意個,要求不能相鄰,求不相鄰的最大和。
input
第一行是乙個正整數 n。
第二行是n 個用空格隔開的正整數。
output
只有乙個正整數,為不相鄰的最大和。
sample input
53 10 8 20 21
sample output
325≤n≤1000000
1≤每個數≤500
題目分析:
這個很明顯是一道dp題qwq
因為對乙個數,我們有兩個選擇,那便是需要2個維度——乙個表示這個數選了,乙個表示沒有選
如果上乙個沒有選,那麼當前的選或者不選都可以,所以我們取大的值
如果上乙個選了的的話並且當前想要去選的話,那麼我們便得要選擇上乙個沒選過的來加上了;
實踐上面無非是:
我們設當沒選了的最優的是:f[i][0]
當前選了的最優的是: f[i][1]
那麼根據上面的分析便可以得到狀態轉移方程:
f[i][0] = max
f[i][1] = f[i-1][0]+a[i];
**:
#include using namespace std;
int n,ans;
int a[1000009],f[1000009][1];
int main()
不相鄰子串行最大和
include include using namespace std int msnae vector nums int incl nums 0 incl表示當可以包含nums i 時,前i個元素所能達到的最大值 初始化為第乙個元素 int excl 0 excl表示不包含第nums i 時,前i...
元素互不相鄰的最大和子陣列
對於乙個給定的陣列,在其中選取其子陣列,要求相鄰的元素不能選取,且要保證選出的子陣列元素和最大。輸入陣列長度及其元素,輸出所選子陣列的和。測試輸入 7 4 2 6 1 3 5 8 測試輸出 21dp i 代表到截至第i項的最大和 可能不包括第i項 分析 對於任何乙個dp問題,其都牽扯到選與不選某個元...
求不相鄰的最大子陣列和
參考 題目 給定乙個陣列a,求出一些數,使得每個元素在陣列a裡兩兩不相鄰,並且和最大。選擇第i個元素,那麼第i 1個元素一定不能選 不選擇第i個元素,那麼第二個元素既可以選,也可以不選 includeusing namespace std int main int selected 8 int no...