#17033: 解題方向


rollfc (胖胖貓)

學校 : 國立清華大學
編號 : 81012
來源 : [36.229.42.175]
最後登入時間 :
2024-11-18 13:03:08
b597. Stickst -- SEARCC-ISSC國際學生程式設計競賽 | From: [140.113.136.219] | 發表日期 : 2019-03-01 19:19

想問一下這題的解題方向,想法是改編於 d375-uva10364 的題目。 (1) 將所有的線段加總後的總長度做質因數分解,只保留因數的數值大於等於最大線段長的數值 這些因數都可能是筷子的長度。 (2) 將輸入的線段由大到小排列,因數部分由小到大排列。 枚舉所有可能的因數直到成功為止, 成功的定義為可以用所有的線段組出剛好邊長是現在這個因數的長度且數量等於總長度/因數 但是 d375-uva10364 的題目測資範圍只有20個片段組成,這題最多會到達50個, 如果挑戰失敗意謂著會把所有可能嘗試過都無法組出來,所以需要更好的剪枝來達成, 而我自己將每次判斷某個線段是不是被用過的判定改為 狀態壓縮的方式加速,但還是吃 TLE。 看了一下 d375-uva10364 的其他人最佳做法可以把時間壓縮到 0ms 以內, 自己即便用狀態壓縮,時間上還是需要 11ms ,所以推測這題會出現 TLE 也是剪枝不夠好導致。 所以想問一下這題通過的大大 或是 d375-uva10364 的人有哪些更好的剪枝判定? d375-uva10364 目前列出來的只有 (1) 總長度必須是4的倍數 (2) 最大線段邊長不能超過 總長度/4 (3) 將線段由大到小排列後再做 DFS 以上只有 (3) 可以沿用到這題,(1)(2) 在解法的第一步時已經濾除 。 
ZeroJudge Forum