Re: [討論] 令人印象深刻的遞迴問題?

看板C_and_CPP作者 (藍影)時間13年前 (2011/04/01 17:53), 編輯推噓1(108)
留言9則, 4人參與, 最新討論串3/9 (看更多)
※ 引述《yauhh (喲)》之銘言: : 我的作法是純粹累加差值,看哪個累計差值最高,就可以把左邊界推到最極限. : 然後在左邊界可以往前推的前提下,看看右邊界可不可以往前推. : 我的左邊界就是低點,右邊界就是高點,因為遞迴的關係,所以是先從陣列右邊開始算, 它「應」是對的,之前看過之「類似」題: Q : 給定一整數數列,有正有負,ex: [3 2 8 9 -25 5 8 4 4 -3 5 3 -10] 要求「連續最大總合」之其合應為多少?若連續最大總合 <=0 則輸出 0 ex1: 3+2+8 = 13 ex2: 5+8+4 = 17 ex3: 5+8+4+...+3=26(max) ----- sol: (1) 一個一個慢慢掃 (2) 當 cur_sum < 0 時,將 cur_sum 歸 0,正值時累加 (3) 若 cur_sum > max_sum,取代 num 3 2 8 9 -25 5 8 4 4 -3 5 3 -10 cur_sum 3 5 13 22 0(-3) 5 13 17 21 18 23 26 16 max_sum 3 5 13 22 22 22 22 22 22 22 23 26 26 ---- coding: for(i=0; i!=sizeof(array)/ sizeof(int); ++i){ cur_sum+=array[i]; if(cur_sum<0) cur_sum=0; if(cur_sum>max_sum) max_sum = cur_sum; } printf("%d\n", max_sum); ---- lemma1: 第一次看到原題時, 聯想到是這題,直覺是和 yauhh 相同做法。 lemma2: 這題有進階題, 有待討論 (也不難解) : 若為 cicle link 非 array? lemma3: 這題在「教育部資訊軟體人才培育先導計畫」第二次競賽裡面似乎也有 http://algorithm.csie.ncku.edu.tw/ETPC/ lemma4: purpose 所提供之題目,「似乎」是將程式碼再紀錄 start_max_pos, end_max_pos,「加以變型」後可得,不知是否有意會錯。 lemma5: 吾人 power 不夠,實在想不透如何限定用 recursive 實做。 -- YouLoveMe() ? LetItBe() : LetMeFree(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.72.67 ※ 編輯: tropical72 來自: 180.177.72.67 (04/01 17:55)

04/01 17:55, , 1F
推 Lemma。數學模型慢慢出來,感覺可以做小論文了!
04/01 17:55, 1F

04/01 21:28, , 2F
我第一次看到直覺並不是這樣的作法,而是比較慢比較穩的分解
04/01 21:28, 2F

04/01 21:30, , 3F
法. 基本是先對每個數字找到另一個數字,是右邊最高點;然後
04/01 21:30, 3F

04/01 21:31, , 4F
是每個數字跟另一個數字取差值,然後找最大的.我比較重視有
04/01 21:31, 4F

04/01 21:31, , 5F
意義的解題步驟.
04/01 21:31, 5F

04/01 21:38, , 6F
@yauhh:或許應先將此題轉至Programming討論適合些:)
04/01 21:38, 6F

04/01 21:48, , 7F
感覺就是partial sum的應用囉
04/01 21:48, 7F

04/02 12:58, , 8F
本來是有解題板可以討論,但是大家都寫C/C++會開始想題目怎解
04/02 12:58, 8F

04/02 12:58, , 9F
所以自然會有些演算法討論出現在這種板上
04/02 12:58, 9F
文章代碼(AID): #1DbQ1_y_ (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DbQ1_y_ (C_and_CPP)