最簡單的「最大子段和」問題

2021-10-09 04:10:16 字數 875 閱讀 1511

最簡單的「最大子段和」問題

description

給定n個整數(可能為負數)a1,a2,……an。求ai,ai+1,……aj 其中1<=i<=j<=n的子段和的最大值。當所有整數均為負數時我們定義其最大子段和為0。例如:當(a1,a2,a3,a4,a5,a6)=(-2,11,-4,13,-5,-2)時,最大子段和為a2+a3+a4=20,i=2,j=4(下標從1開始)這個問題我們稱之為「最大子段和問題」。

在課堂上,我們假定n<=100,今天我們把n的範圍規定修改為n<=200,你的任務是設計乙個程式解決它。

input

輸入由兩行,第一行為n;第二行為n個整數。

output

輸出也有兩行,第一行為:「from=***,to=***」;第二行為:「maxsum=***x」,參見樣例。

sample input

6-2 11 -4 13 -5 -2

sample output

from=2,to=4

maxsum=20

#include

#include

using

namespace std;

int a[

1001

],n,mx,from,to,s;

intmain()

from=1;

to=n;

mx=0;

for(i=

1;i<=n;i++)}

}printf

("from=%d,to=%d\n"

,from,to)

;printf

("maxsum=%d\n"

,mx);}

return0;

}

最大子段和問題

給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整均為負數時定義子段和為0 分治法 分析 首先將陣列分為兩部分,最大子段和 可以在陣列的左半部分也可以在右半部分,也可以橫跨分割點,因此我們只需要用分治思想求出左邊最大...

最大子段和問題

給定n 個整數 有可能是負數 組成的序列,要求分別用蠻力法,減治法和動態規劃法,求最該序列的最大子段和,並對它們的效率進行比較分析。也稱窮舉法或列舉法,是一種簡單直接地解決問題的方法,常常基於問題的描述,所以,蠻力法也是最容易應用的方法。它依賴的基本技術是遍歷,採用一定的策略依次處理待求解問題的所有...

最大子段和問題

問題描述 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如 a i a i 1 a j 當所給的整數均為負數時定義子段和為0.如果序列中全部是負數則 最大子段和為0,依次所定義 所求的最優值max,1 i問題解析 動態規劃演算法 dp i 包含元素i的子段和 dp 0 ...