题目
- POJ Post Office
- 九度 买卖股票
- 九度 项目安排
- POJ Lazy Worker
- Leetcode Word Break
- 九度 座位问题
思路
1. 第一二道题是二维DP, 第三四道题是一维DP, 但是大体上来看, 思路是相同的
2. 四道题的公共特征是: i 是物品, j 是数量, dp[i][j] 可以是方案数, 也可以是最值; 当最外层循环到 i 时, 需要做出选择, 不同的选择代价不同; 都有枚举的过程; j 是比较明显的可以枚举的量, 题目往往会给 j 设置个上限
3. 第一道题, dp[i][j] 表示前 i 个村子放 j 个邮局的最小距离. dp[i][j] = min(dp[k][j-1] + dist[k+1][i]) 枚举最后一个邮局的位置
4. 第二道题, dp[i][j] 表示前 i 天买卖 j 次股票的最大收益. dp[i][j] = min(dp[k][j-1] + price[i]-price[k+1]), 枚举最后一次股票交易在哪一天
5. 第三道题, dp[i] 表示在第 i 个job 的截止时间前能够获得的最大收益. dp[i] = max(dp[i-job[i].time] + dp[j]), 枚举第 i 个 job 做或不做
6. 第四道题, dp[i] 表示 i~endtime 能够获得的最大收益. dp[i] = dp[i+job[i].time] + job[i].value 枚举第 i 天可以做的所有工作