看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《k577887 (HaHa-Dog)》之銘言: : 問題(Question): : 這一題為什要從後面看過來算LIS 跟LDS : 為什從第一個算會錯誤... : http://ppt.cc/s3cm : 討論地方 1 2 4 3 7 6 : 從第一個算起 7 6 3 2 1 怎來的.... 有一種想法是這樣的, 先假設1一定要用, 所以接下來一定是從1開始, 往左越來越大往右越來越小。 (也就是把1之前的東西砍光接著做LIS+LDS-1) 接下來我們嘗試拿2開始, 做剛才的事情。 之後從4開始嘗試... 一直試到從6當頭為止, 我們把每個東西拿來當開頭都嘗試過了, 看最長的那串多長就對了。 為什麼會對呢? 我們假設規定某個東西一定要拿, 那它之後的東西都只能丟左邊或右邊, 所以可以強迫算出來的LIS和LDS只有中間的開頭重複, 因此,只要拿每個數字當開頭,計算LIS+LDS-1, 最大的那組就是答案了。 不過,這樣需要跑O(N^3) (假設LIS用N^2的方法) 至於為什麼從後面往前跑可以加速到O(N^)呢? 就留著讓你自己想想看了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.49.243
firejox:DP的不就是可以求出每一個嗎? 08/24 13:20
DarkPrincex:用DP的可以找出每個人當終點,可是沒辦法做每個人起點 08/24 13:47
firejox:可以處理起點的呀 就倒過來做呀 08/24 15:17
firejox:倒過來就變成起點了呀 08/24 15:23
DarkPrincex:痾...你直接把我最後留給他想的為什麼要倒著做講出來 08/24 19:21
k577887:以1起點 最大LIS+LDS-1不是4+2-1=5嗎 為什最大才4... 08/24 20:03
firejox:LDS是2? 再想想吧 你怎麼算的 08/24 20:35
dqIpb:以1起點指以1為LDS的第一個數的LDS長度是多少,你有沒有弄懂 08/24 20:37
dqIpb:為什麼是LIS+LDS-1? 08/24 20:37
k577887:SOR 我一直把它當作整個最長在看...所以1起點LDS 1? 08/24 22:43
k577887:-1是扣掉以1起點? 08/24 22:44
firejox:-1是扣掉重複的部份 08/24 22:45
k577887:謝謝大家 我再想一下!! 08/25 11:26