#38937: 思路 雙指針


qerpzzea@gmail.com (賽希爾 cecill(陳宥穎))

學校 : 高雄市立中正高級中學
編號 : 169400
來源 : [163.32.60.236]
最後登入時間 :
2024-05-01 11:18:53
g278. 4. 美食博覽會 -- 2021年9月APCS | From: [114.40.38.121] | 發表日期 : 2024-01-04 21:40

用兩個指針(一個當終點一個當起點)以線性的時間找出找出最長連續不重複子序列,然後每次選擇最優解,把選過的設為-1,循環k遍之後就是答案了

 
#39574: Re: 思路 雙指針


r1cky (hehe)

學校 : 國立臺灣師範大學
編號 : 158637
來源 : [140.122.136.180]
最後登入時間 :
2024-05-08 14:31:15
g278. 4. 美食博覽會 -- 2021年9月APCS | From: [140.122.136.44] | 發表日期 : 2024-03-07 09:39

用兩個指針(一個當終點一個當起點)以線性的時間找出找出最長連續不重複子序列,然後每次選擇最優解,把選過的設為-1,循環k遍之後就是答案了


不太清楚你怎麼實作的,但如果我理解沒錯,我覺得應該是每次找出最長的區間,然後如果很多個這樣的區間就選最左或最右的,把這個區間「吃掉」,接著再繼續做

上面這個做法,在以下的測資會出錯 :

10 2

4 5 1 2 3 4 5 6 2 3

程式第一次會拿中間 $6$ 個,變成下面這個

4 5 XXXXXX 2 3

第二次拿左邊或右邊 $2$ 個,算出答案是 $8$

但最佳解法是左邊一半、右邊一半

4 5 1 2 3 | 4 5 6 2 3

最佳解是 $10$

如果版主有看到這個訊息,發現我理解是錯的,希望能回覆一下,謝謝!

 
ZeroJudge Forum