1. 程式人生 > >sincerit 演算法競賽寶典 書架問題(一維dp)

sincerit 演算法競賽寶典 書架問題(一維dp)

已知有N本書,每一本書的寬(厚度)為Wi,以及長度(高度)Li,張琪曼現在需要做一個多層的書架,書架的寬度最多為Sw。 那麼請問張琪曼的這個書架至多要多高? 張琪曼並不想把書的順序打亂, 她希望能夠依次講他們排入書架。書必須按照正常的順序放置,不能倒過來放 現讀入每本書的資訊以及書架最大得寬度, 計算書架最少要多高 輸入格式 第一行一個N, Sw 以下N行每行兩個整數Wi, Li, 描述每一本書的寬度長度 輸出格式 僅一個數,表示最少需要的高度 輸入樣例 5 5 2 1 1 2 1 3 2 3 2 2 輸出樣例 5 樣例說明 1, 2兩本書放在第一層, 3, 4, 5放在第二層,第一層高2,第二層高3

分析: 看似複雜,實則簡單的一維DP練習, 任何一本書按照順序存放只有兩種情況: 一種是放在當前一層的最後面,另一種是如果放不下,則放到下一層去 設F[i]表示到第i本書時的最優解, opt[j+1, i]表示從j+1到i本書的高度, 轉移方程: F[i] = min{f[j], opt[j+1, i]}; 1<=i <= n, 0<=j<i 答案就是F[n]