問題描述:
給定乙個長度為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 它擁有...