動態規劃 最大連續子串行乘積

2021-06-26 01:47:32 字數 715 閱讀 3333

題目描述:

給定乙個浮點數序列(可能有正數、0和負數),求出乙個最大的連續子串行乘積。

分析:若暴力求解,需要o(n^3)時間,太低效,故使用動態規劃。

設data[i]:第i個資料,dp[i]:以第i個數結尾的連續子串行最大乘積,

若題目要求的是最大連續子串行和,則易確定狀態轉移方程為:

dp[i]=max(data[i],dp[i-1]+data[i])(dp[i]為以第i個數結尾的連續子串行最大和)

但乘積存在負負得正的問題,即原本很小的負數成了乙個負數反而變大了,(負數逆襲了),

故不能照抄加法的

轉移方程,為了解決這個問題,需要定義兩個陣列:

dp1[i]:以第i個數結尾的連續子串行最大乘積

dp2[i]:以第i個數結尾的連續子串行最小乘積

轉移方程:

dp1[i]=max(data[i],dp1[i-1]*data[i],dp2[i-1]*data[i]);

dp2[i]=min(data[i],dp1[i-1]*data[i],dp2[i-1]*data[i]);

最後遍歷dp1得到最大值即為答案。

**如下:

#includedouble max(double a,double b)

double min(double a,double b)

return ans;

}

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

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

最大連續子串行乘積

問題描述 給定乙個整數序列 可能有正數,0和負數 求它的乙個連續最大子串行乘積,如果乘積為負數,輸出 1 分析 假設陣列為a,直接利用動歸來求解,考慮到可能存在負數的情況,我們用max i 來表示以a i 結尾的最大連續子串行的乘積值,用min i 表示以a i 結尾的最小的連續子串行的乘積值,那麼...

最大連續子串行乘積

推薦 題目描述 給定乙個浮點數序列 可能有正數 0和負數 求出乙個最大的連續子串行乘積。輸入 輸入可能包含多個測試樣例。每個測試樣例的第一行僅包含正整數 n n 100000 表示浮點數序列的個數。第二行輸入n個浮點數用空格分隔。輸入資料保證所有數字乘積在雙精度浮點數表示的範圍內。輸出 對應每個測試...