HOJ 1760 最大子段和

2021-06-21 12:57:16 字數 1089 閱讀 4619

hoj 1760

題目大意: 

曼紐爾想不通過太多的工作,然後很快變得富有 他決定賭博 ,剛開始  他決定研究 贏家和輸家,因此 他可以確定連續的贏家,然後精心策劃乙個雙贏的策略

但是曼紐爾 正和他想的一樣聰明,不知道 怎麼在電腦上程式設計, 因此他僱傭你為他寫乙個程式幫助他 精心策劃他的策略

你最開始的工作時,寫乙個程式鑑定從連續的賭博中最大可能收益,乙個bet是一定數量的錢可能為正可能為負,

input

: 輸入的序列包裹乙個正整數 n, 給出序列的長度,接下來有n個整數

output:

對每個輸入,給出相應的輸出結果,如果結果顯示不可能贏,輸出結果"losing streak."

解題方法:

一看就是求最大子串行和的問題, 一系列的賭博 要獲得最大值,不能每次都賭博吧,因此就是求最大連續子串行的最大值

對於求連續子串行的最大值問題 解題方法:屬於動態規劃,因此 要找狀態方程  :

dp[i] =    1、  dp[i-1]  < 0 ,   a[i];

2、 dp[i-1]  > 0  dp[i-1] + a[i] 

最大子段和問題 很簡單 最大連續 求和問題 首先設定 sum = a[0] 然後從第二個開始 進行求和 sum < 0 捨棄 前面的從當前開始

即設定 sum = a[i]  其他情況  sum += a[i]  再 這就是要注意記錄其中出現的最大值 肯定會有最大值 的if  sum > max  那麼  max  = sum

好吧 不多說了下面給出**:

#includeusing namespace std;

#define maxsize 10004

int a[maxsize];

int sum;

int main()

int max = a[0];

sum = a[0];

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

else

//記錄出現的最大值

if(sum > max)

}if(max > 0)

{cout<<"the maximum winning streak is "<

最大子段和

設a 是n個整數的序列,稱為該序列的子串行,其中1 i j n.子串行的元素之和稱為a的子段和.例如,a 2,11,4,13,5,2 那麼它的子段和是 長度為1的子段和 2,11,4,13,5,2 長度為2的子段和 9,7,9,8,7 長度為3的子段和 5,20,4,6 長度為4的子段和 18,15...

最大子段和

問題表述 n個數 可能是負數 組成的序列a1,a2,an.求該序列 例如 序列 2,11,4,13,5,2 最大子段和 11 4 13 20。1 窮舉演算法 o n3 o n2 2 分治法 將序列a 1 n 從n 2處截成兩段 a 1 n 2 a n 2 1 n 例項 三 最大子段和 問題表述 n個...

最大子段和

再給頂的n個數的陣列中選出連續的若干個數,使得他們的和是最大的,即最大連續自序列和.列如.序列.1 2 3 1 6 5 9 結果 當取子串行 3,1,6,5,9 結果12 我的思路.1.最大連續子串行的開頭是在1.n之中.的最大連續和 2.求出以i,開頭的最大連續和,此時開頭已經確定了,那麼通過列舉...