題目:有一排n個整數,a1,a2,a3,......(1<=n<=1e6)(1e-9<=ai<=1e9)。求最大的非空字段和。
因為當這個陣列全為負數時,根據那個**,求出最後的結果是0,相當於是空子段。
本題應設定,ans為足夠小的負數,當陣列全為負數時,最後的結果就是陣列中最大的值,如果不是全負數,就還是最大欄位和的思路。**如下:
#includeusing namespace std;
int main()
long long ans=-10000000000;
long long sum=0;
for(int i=1;i<=n;i++)
if(a[i]>0&&ans<0)
if(ans>0)
if(sum<0)
}cout << ans;
return 0;
}
上面的**時自己寫的,感覺想的時候有點繞,**不夠清晰。
以下的**是別的博主的,思路大同小異,但是**的可讀性比上面的強。
#includeusing namespace std;
#define max 1000005
#define nil 1e9
typedef long long ll;
ll a[max];
int main()
cout << ans << endl;
} return 0;
}
動態規劃之最大子段和問題
問題描述 給定由n個整數 包含負整數 組成的序列a1,a2,an,求該序列子段和的最大值。當所有整數均為負值時定義其最大子段和為0。依此定義,所求的最優值為 例如,當 a1,a2 a3 a4 a5 a6 2,11,4,13,5,2 時,最大子段和為 11 4 13 20 1 最大子段和問題的簡單演算...
動態規劃之最大子段和問題
有一由n個整數組成的序列a 求該序列如 a i a i 1 a j 的子段和的最大值。如果序列中全部是負數則最大子段和為0,依此定義,所求的最優值max,1 i j n。輸入 n 序列的長度 序列值輸出 最大子段和 例如 輸入 6 2,11,4,13,5,2 輸出 20演算法可通過動態規劃求解 我們...
動態規劃之最大子段和問題
問題描述 給定由n個整數 包含負整數 組成的序列a1,a2,an,求該序列子段和的最大值。當所有整數均為負值時定義其最大子段和為0。依此定義,所求的最優值為 例如,當 a1,a2 a3 a4 a5 a6 2,11,4,13,5,2 時,最大子段和為 11 4 13 20 1 最大子段和問題的簡單演算...