version 1.1 build 20071115html
本篇文章是我(dd_engi)正在進行中的一個雄心勃勃的寫做計劃的一部分,這個計劃的內容是寫做一份較爲完善的NOIP難度的動態規劃總結,名爲《解動態規劃題的基本思考方式》。如今你看到的是這個寫做計劃最早發佈的一部分。算法
揹包問題是一個經典的動態規劃模型。它既簡單形象容易理解,又在某種程度上可以揭示動態規劃的本質,故很多教材都把它做爲動態規劃部分的第一道例題,我也將它放在個人寫做計劃的第一部分。編輯器
讀本文最重要的是思考。由於個人語言和寫做方式向來不以易於理解爲長,思路也偶有跳躍的地方,後面更有須要大量思考才能理解的比較抽象的內容。更重要的是:不大量思考,絕對不可能學好動態規劃這一信息學奧賽中最精緻的部分。工具
你如今看到的是本文的v1.1版,發佈於2007年11月15日。我會長期維護這份文本,把你們的意見和建議融入其中,也會不斷加入我在OI學習以及未來可能的ACM-ICPC的征程中獲得的新的心得。但目前本文尚未一個固定的發佈頁面,想了解本文是否有更新版本發佈,能夠在OIBH論壇中以「揹包問題九講」爲關鍵字搜索貼子,每次比較重大的版本更新都會在這個論壇裏發貼公佈。也能夠用「揹包問題九講」爲關鍵字在搜索引擎中搜索以獲得最新版本。學習
這是最基本的揹包問題,每一個物品最多隻能放一次。優化
第二個基本的揹包問題模型,每種物品能夠放無限屢次。ui
每種物品有一個固定的次數上限。this
將前面三種簡單的問題疊加成較複雜的問題。搜索引擎
一個簡單的常見擴展。插件
一種題目類型,也是一個有用的模型。後兩節的基礎。
另外一種給物品的選取加上限制的方法。
我本身關於揹包問題的思考成果,有一點抽象。
試圖舉一反三、觸類旁通。
給出 USACO Training 上可供練習的揹包問題列表,及簡單的解答。
除動態規劃外另外一種揹包問題的解法。
若是有任何意見和建議,特別是文章的錯誤和不足,或者但願爲文章添加新的材料,能夠經過http://kontactr.com/user/tianyi/這個網頁聯繫我。
值得說明的是,若是有OI方面的問題,例如不明白本身的程序爲何錯了或者索要某種算法的源代碼,使用這個聯繫方式可能得不到及時解答。請在OIBH論壇發問。
感謝如下名單:
他們每人都最早指出了本文曾經存在的某個並不是可有可無的錯誤。謝謝大家如此仔細地閱讀拙做並彌補個人疏漏。
感謝 XiaQ,它針對本文的第一個beta版發表了用詞嚴厲的六條建議,雖然我只認同並採納了其中的兩條。在全部讀者幾乎一邊倒的讚賞將我包圍的當時,你的貼子是個人一劑清醒劑,讓我能清醒起來並用更嚴厲的眼光審視本身的做品。
sfita 提供了P01中的「一個常數優化」。
固然,還有用各類方式對我表示鼓勵和支持的幾乎沒法計數的同窗。不論是當面讚賞,或是在論壇上回復個人貼子,不論是發來熱情洋溢的郵件,或是在即時聊天的窗口裏豎起大拇指,大家的鼓勵和支持是支撐個人寫做計劃的強大動力,也鞭策着我不斷提升自身水平,謝謝大家!
最後,感謝 Emacs 這一世界最強大的編輯器的全部貢獻者,感謝它的插件 EmacsMuse 的開發者們,本文的全部編輯工做都藉助這兩個卓越的自由軟件完成。謝謝大家——自由軟件社羣——爲社會提供瞭如此有生產力的工具。我深深欽佩大家身上體現出的自由軟件的精神,沒有大家的感召,我不能完成本文。在大家的影響下,採用自由文檔的方式發佈本文檔,也是我對自由社會事業的微薄努力。
Copyright (c) 2007 Tianyi Cui
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.