随笔分类 -  6.01.0 背包问题

摘要:DP + 贪心 我们发现,如果只有一个窗口,贪心即可解决,吃饭时间长的人一定要先打饭 有两个窗口的时候,这条性质依然满足,但是两个窗口如何分配,需要 01 背包 cpp include include include include include using namespace std; cons 阅读全文
posted @ 2018-05-22 14:28 Mr_Wolfram 阅读(162) 评论(0) 推荐(0)
摘要:多重背包 + 贪心 本题是一道多重背包问题,但是如果用朴素的多重背包会T,可以考虑二进制拆分,或单调队列优化 但是本题是一道判定性问题,所以我们有贪心策略,即对于没一种面值来说,选用尽量少的 i 种硬币, 用 used 数组来记录当前面值所需的 i 种硬币最少是多少 cpp include incl 阅读全文
posted @ 2018-03-19 08:41 Mr_Wolfram 阅读(181) 评论(0) 推荐(0)
摘要:DP 题目问的是最大空暇时间,那么就定义dp[i]为第i分钟的最大空暇时间,显然满足最优子结构,我们发现dp[i]仅与其后的值有关,那么从后往前推,如果第i分钟没有任务,dp[i]=dp[i+1],如果有任务,就遍历所有任务 dp[i]=max{dp[i+task[j]]} 即本问题可以看成分组背包 阅读全文
posted @ 2017-11-20 21:29 Mr_Wolfram 阅读(148) 评论(0) 推荐(0)
摘要:这道题是一道背包问题,考虑一个背包, 显然如果我们直接设dp[i]表示前i个使差值最小所需的最少翻转次数,是具有后效性的。 所以我们将直接求最值,改为求某个值是否可行,这种求最值转变为求可行性的思想是非常实用的。 状态 dp[i][j]表示使用前i个物品修改得到差值j的最小步数。 第一步求出原来两个 阅读全文
posted @ 2017-11-20 21:08 Mr_Wolfram 阅读(277) 评论(0) 推荐(0)