最大子串和之字首字尾可反轉

2021-07-23 08:08:07 字數 897 閱讀 9099

問題描述:

給定乙個長度為n的整數序列,可以將該序列的字首和字尾中的每個數字都乘以-1。字首和字尾可以交叉也可以為空。求能得到的最大序列和是多少。

輸入描述:

輸入為兩行。

第一行乙個整數n(1 <= n <= 100),表示一共有n個元素

第二行為n個數,即每個整數都在32位int範圍內。以空格分隔。

輸出描述:

輸出最大連續序列和

輸入例子:

6 -3 5 -2 6 8 -3

輸出例子:

23演算法利用了最大子串和的性質:

若a[s,e]為序列具有的最大子串和的片段

則 **a[s,j]>=0 (j >= s, j <= e)

a[k,e]>=0 (k >= s, k <= e)**

#include 

#include

#include

using namespace std;

int main()

else

}

}//求下標為0——(s-1)的反轉得到的最小子串和

int min1 = 0;

sum = 0;

for (int i = 0; i < s; i++)

else

}//求(e + 1)——n反轉得到的最小子串和

int min2 = 0;

sum = 0;

for (int i = e + 1; i < n; i++)

else

}printf("%d\n", m_res - min1 - min2);

system("pause");

}

最大子串和

要說明kadane演算法的正確性,需要兩個結論。首先,對於array 1 n 如果array i j 就是滿足和最大的子串,那麼對於任何k i k j 我們有array i k 的和大於0。因為如果存在k使得array i k 的和小於0,那麼我們就有array k 1 j 的和大於array i ...

最大子串和

本文討論的最大子串和指的是在乙個數字序列中,求出所有子串各數字之和最大 對於給定的乙個數字序列,這裡以為例說明 示例則是普遍對於整型數字序列 先給出 不懂的讀者再看講解 include using namespace std int a 1010 long maxsubstr int a,int n...

最大子矩陣 字首和 貪心

給定乙個包含整數的二維矩陣,子矩形是位於整個陣列內的任何大小為1 1或更大的連續子陣列。矩形的總和是該矩形中所有元素的總和。在這個問題中,具有最大和的子矩形被稱為最大子矩形。例如,下列陣列 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 其最大子矩形為 9 2 4 1 1 8 它擁有...