演算法筆記 最大子段和問題

2022-03-05 07:28:58 字數 1018 閱讀 2135

演算法筆記

1.非連續最大子段和

如果不全為負數,最大子段和所有大於等於0的元素的和;如果全為負數,最大子段和為最大的負數。

2.連續最大子段和

①無長度限制:

例題:洛谷p1115最大子段和

**:

#includeusing

namespace

std;

#define ll long long

intmain()

cout

return0;

}

view code

hdu 1003 max sum

**:

#includeusing

namespace

std;

#define ll long long

#define pb push_back

#define mem(a,b) memset(a,b,sizeof(a))

const

int inf=0x3f3f3f3f

;int

main()

if(sum<0

)

}if(i-1!=0)cout<

cout

<

case

"<

cout''

}}

return0;

}

view code

②有長度限制(如最大連續奇數字段和)

杭電集訓隊排位賽

**:

#includeusing

namespace

std;

const

int n=1e5+5

;int

a[n];

intmain()

sum=a[1

];

for(int i=2;i1;i+=2

)

cout

}return0;

}

view code

最大子段和問題

給定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 ...