查看: 1473|回復: 0
打印 上一主題 下一主題

[UVa] 103 - Stacking Boxes

[複製鏈接]
  • TA的每日心情
    慵懶
    2015-4-10 14:18
  • 簽到天數: 78 天

    [LV.6]常住居民II

    176

    主題

    612

    帖子

    3959

    積分

    管理員

    Rank: 9Rank: 9Rank: 9

    積分
    3959

    台南一中資訊社新手達陣程式設計達人 - 2014

    跳轉到指定樓層
    樓主
    發表於 2014-4-20 13:59:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

    趕快加入我們來參與討論吧!

    您需要 登錄 才可以下載或查看,沒有帳號?加入我們

    x
    原題:http://luckycat.kshs.kh.edu.tw/homework/q103.htm
    ACCODE:

    非常麻煩的一題

    qsort也非常難用

    不過只要sort的地方做得好

    後面做起來很輕鬆,lis就可以了

    注意相等時並不能放入

    簡單講一下想法好了

    由於可以翻轉/扭曲(?)反正說穿了就是大對大、小對小

    這種情形sort可以解決

    不過用qsort的話,不論是二維或結構我都不會寫|||

    後來只好先另開一維存,排完再丟進結構

    之後就依每個盒子大小排序

    排序的依據:小的放前面

    提示:lis如果要做得順,就把最小的數字按小到大排序

    若最小的數字相等,則後面數字由大到小排序

    如此用我後面lis的方法才會順

    lis的部份嘛

    我是從頭開始找,若可以套入則略過(注意套入條件不包含相等)

    若不能夠套入則把它蓋掉

    原因:若不能夠套入這項,但前面的都能夠套入,故它該取代這項

    然而為什麼可以直接取代是由於我把第一數字相等的情形

    寫成依後面數字由大到小排序,如此直接覆蓋時

    出現盒子之第一數字以非遞減順序呈現,故不列入考慮中

    即後面出現的盒子在第一數字上可以蓋掉它

    但相等的情形蓋不掉,不過因為後面是按大到小排序

    因此在第一數字相同情形下,蓋到最後變成後面數字最小的留下

    而後面比較第一數字時必可以蓋掉它,但它後面數字最小

    故最可能可以套入後面的盒子,直接lis就可以順利完成

    =========================================
    Sylveon的補充

    C++algorithm的sort可以有自訂比序函數的參數可用,操作較為簡單
    =========================================
    作者  zenixls2 (丁丁叮叮)                                  站內  sa072686
    標題  [ACM] 103
    時間  2007/12/06 Thu 11:33:04

    0.000 in STL Map + C  Rank 40


    對每一組輸入qsort,使其維度內為遞增排序

    將其存於map,會自動捨去重複的(不過要重新定義運算子),並作排序

    再以LIS(n^2)作即可

    鼓勵大家用STL+C寫code



    回復

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表