最大連續子串行之和

2021-08-07 15:28:25 字數 1220 閱讀 4046

問題描述:leyni得到了乙個長度為n的序列,xiange要求leyni最多可以修改其中k個元素,每次修改的規則是只能將乙個數字修改為其相反數。

leyni想知道在修改後,他能得到的所有長度為len的連續子串行中,最大的(子串行和的絕對值)為多少?

input

輸入包含多組測試資料。

對於每組測試資料:

第1行,包含二個整數n, len (1 ≤ n, len ≤ 105)代表著序列的長度和子串行的長度限制。

第2行,包含n個由空格分隔的整數,每個元素的範圍為[-109, 109],代表著leyni得到的序列。

第3行,包含乙個整數k (0 ≤ k ≤ n),表示允許修改的最大次數。

處理到檔案結束。

output

對於每組測試資料:

第1行,輸出leyni能得到的最大連續子串行和。

解題思想:這個與原始的最長子序列有較大差距,主要考慮如何轉換相反數使其子段和最大,該種解法是超時的還需要改進。核心思想是將子段中最小且是負數的數變為它的相反數(即正數),這樣得到的子段之和是最大的

**如下:

/*

問題描述:leyni得到了乙個長度為n的序列,xiange要求leyni最多可以修改其中k個元素,每次修改的規則是只能將乙個數字修改為其相反數。

leyni想知道在修改後,他能得到的所有長度為len的連續子串行中,最大的(子串行和的絕對值)為多少?

input

輸入包含多組測試資料。

對於每組測試資料:

第1行,包含二個整數n, len (1 ≤ n, len ≤ 105)代表著序列的長度和子串行的長度限制。

第2行,包含n個由空格分隔的整數,每個元素的範圍為[-109, 109],代表著leyni得到的序列。

第3行,包含乙個整數k (0 ≤ k ≤ n),表示允許修改的最大次數。

處理到檔案結束。

output

對於每組測試資料:

第1行,輸出leyni能得到的最大連續子串行和。

*/#include #include int n,len,m;//n為母序列長度,len為子串行最大長度,m為允許修改的最大次數

int oppnum(int s,int len)

int main()

printf("%d\n",max);

}return 0;

}

程式執行結果展示:

知識點總結:暴力。。。

最大連續子串行之和,最大連續子串行乘積

最大連續子串行之和問題描述為 陣列中里有正數也有負數,連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和,求所有子陣列的和的最大值。分析,對陣列a進行一遍掃瞄,sum i 為前i個元素中,包含第i個元素且和最大的連續子陣列,maxsum儲存當前子陣列中最大和,對於a i 1 來說,sum i ...

最大連續子串行之和

窮舉法思路 1,3,4,5最大子串行為4 5 9,4 2 3 5 最大子串行為4 2 3 5 10 窮舉數列的每個區間,將區間內的數相加,更新最大值,每計算乙個區間後求和的sum要清0 include main sum 0 進入下次計算sum清0 printf d max 非列舉思路 當輸入的數全為...

最大連續子串行之和(動態規劃)

1.問題描述 設n個元素的序列儲存在陣列a 0.n 1 中,求陣列中連續子串行之和的最大值。2.遞推公式 設all i 為子問題a i.n 1 的連續子串行之和的最大值,start i 為從a i 開始的連續序列之和的最大值,因此 all i a n 1 i n 1時,all i maxi 0,1,...