hdu 4561 模擬小題or連續最大積

2021-08-09 01:47:27 字數 1240 閱讀 7286

description

小明和他的好朋友小西在玩乙個遊戲,由電腦隨機生成乙個由-2,0,2三個數組成的陣列,並且約定,誰先算出這個陣列中某一段連續元素的積的最大值,就算誰贏!

比如我們有如下隨機數組:

2 2 0 -2 0 2 2 -2 -2 0

在這個陣列的眾多連續子串行中,2 2 -2 -2這個連續子串行的積為最大。

現在小明請你幫忙算出這個最大值。

input

第一行輸入乙個正整數t,表示總共有t組資料(t <= 200)。

接下來的t組資料,每組資料第一行輸入n,表示陣列的元素總個數(1<= n <= 10000)。

再接下來輸入n個由0,-2,2組成的元素,元素之間用空格分開。

output

對於每組資料,先輸出case數。

如果最終的答案小於等於0,直接輸出0

否則若答案是2^x ,輸出x即可。

每組資料佔一行,具體輸出格式參見樣例。

sample input 2

2-2 0

102 2 0 -2 0 2 2 -2 -2 0

sample output

case #1: 0

case #2: 4

剛開始的思路就是搜尋吧,搜尋主要就是三點,一點就是這點是2,那麼直接搜尋,一點就是-2,那麼就要考慮要與不要。就可以了。

不過就是超時間了,具體**如下:

超時**:

#include#include#include#includeusing namespace std;

int vis[10005],ans,n;

void dfs(int flag,int num,int i)

}int main()

{ int t;

int l=1;

scanf("%d",&t);

while(t--)

{scanf("%d",&n);

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

scanf("%d",&vis[i]);

ans=0;

vis[0]=0;

for(int i=0;i<=n;)

{if(vis[i]==0)

{int st = i+1;

while(true){

i++;

if(i==n+1 || vis[i]==0){

int mid = solve(st,i);

if(ans

hdu4561 bjfu1270 最大子段積

就是最大子段和的變體。最大子段和只要乙個陣列,記錄前i個裡的最大子段和在f i 裡就行了,但是最大子段積因為有負乘負得正這一點,所以還需要把前i個裡的最小子段積存起來。就可以了。直接上 author ben include include include include include includ...

演算法小題 最大連續子串行和問題

解法二解法三 解法三 番外版 實驗結果 刷題的時候遇到了這個最大連續子串行和的問題,查閱研究了一下。記錄在此。希望能夠便人便己。給定乙個陣列a n 陣列元素均為自然數集 有正數,有負數 請求出該陣列乙個連續的子串行,使得這個子串行的和值最大,示例如下 a 那麼它的最大連續子串行為 和值 23 說明 ...

HDU 最大連續子串行

最大連續子串行 problem description 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子串行元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和為20。在今年的資料結構考卷中,要求編寫程式得到最大和,現在增加乙個要求,即還需要輸出該...