动态规划
樂_smile
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
对我来说很难的dp UVA1625
其实dp可能本身并不难,主要是要找到状态转移方程 这个是一个让我引发深思的dp 两个字符串,两个,两个,什么东西都是两个,貌似两个,然后有先后拿的顺序就可以dp 这似乎是一个规律,而且数据规模往往在 n^2可以解决的情况 比如 1e3 ~ 5e3这个数据量 话不多说看一下这道题的描述 描述很简单就是两个字符串给你,然后你可以从第一个字符串和第二个字符串的头拿字母,然后凑成一个新的字符串 然后一个字...原创 2020-01-25 18:06:19 · 332 阅读 · 0 评论 -
借一道题理解dp UVA11584
经常会出现看到一道题,不知道是dp,或者不知道怎么dp,知道dp了又不知道怎么初始化的问题。 借这道题。 把dp深入理解一下 题目: 把一个字符串分成尽可能少的回文串,问分成的最少的回文串数量为多少。 例如: aaadbccb 可以分成三个回文串 aaa, d, bccb 这是能分成的最少回文串的数量。 为什么会想到dp? 是否有明确的状态转移方程? 这道题有一个状态转移方程 如果令dp[i] 为...原创 2020-01-23 16:07:59 · 274 阅读 · 0 评论 -
基础动态规划问题之LCS和LIS
LCS: longest common sequence 即 最长公共子序列 例如 1 3 4 5 6 1 4 5 6 2 最长公共子序列就是 1 4 5 6 即两个序列从左到右删除若干元素能得到的最长相同子序列 动态规划思想 从后往前 设 dp(i, j) 表示第一个数字在i位置,第二个数字在j位置 听不懂,没关系,我们模拟这个过程 一开始由于两个序列都是长度为5 因此从dp(5, 5)开始 并...原创 2020-01-08 13:43:19 · 397 阅读 · 0 评论 -
分组背包的三个问题 HDU 3535
有N件物品和一个容量为V的背包。第i件物品的费用是w[i],价值是v[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 这是分组背包的第一类问题 至多只能选一件 所以状态转移方程为 所以对当前组的dp全部设为之前的状态值 for(int j = 0; j <= V; j++) { dp[k][j...原创 2019-12-24 18:16:13 · 267 阅读 · 0 评论 -
多重背包的应用问题 HDU 1059
Marsha和Bill拥有一系列大理石。他们希望将藏品分开,以使两者都享有相同的份额。如果所有的大理石都具有相同的价值,这将很容易,因为那样他们就可以将收藏品分成两半。但不幸的是,有些大理石比其他大理石更大或更漂亮。因此,玛莎(Marsha)和比尔(Bill)首先为每个大理石分配一个值,即一个介于1到6之间的自然数。现在,他们希望对大理石进行分割,以便使每个大理石都具有相同的总价值。 不幸的是,...原创 2019-12-24 15:52:43 · 358 阅读 · 0 评论 -
完全背包问题的优化 Luogu 1853
题目背景 约翰先生获得了一大笔遗产,他暂时还用不上这一笔钱,他决定进行投资以获得更大的效益。银行工作人员向他提供了多种债券,每一种债券都能在固定的投资后,提供稳定的年利息。当然,每一种债券的投资额是不同的,一般来说,投资越大,收益也越大,而且,每一年还可以根据资金总额的增加,更换收益更大的债券。 题目描述 例如:有如下两种不同的债券:①投资额4000,年利息4000,年利息400;②投资额300...原创 2019-12-23 23:42:25 · 349 阅读 · 0 评论 -
01背包带顺序问题 HDU 3466
最近,iSea去了一个古老的国家。这么长时间以来,它是世界上最富有和最强大的王国。结果,即使这个国家不再富裕,这个国家的人民仍然感到非常自豪。 商家是最典型的商家,每个商家仅售出一件商品,价格为Pi,但如果您的钱少于Qi,他们会拒绝与您进行交易,并且iSea评估每件商品的值为Vi。 如果他有M个货币单位,那么iSea可以获得的最高价值是多少? 输入中有几个测试用例。 每个测试用例均以两个整数N,...原创 2019-12-23 18:12:53 · 527 阅读 · 0 评论 -
UVa 1347 旅行 (Tour)
分析: 可以假想是两个人从一边出发,先让一个人走到2号点 这样一开始的状态是dp(2, 1) dp(i, j) 的意思是 一个人走到i点一个走到j点后离终点的最短距离 如果仅仅是这样,无法表示每个点都走过了 因为从dp(i, j) 来看无法看出接下来可以走的点是否有 i + 1, 或者 j + 1 也许i + 1, j + 1已经被走过了,那怎么办? 让他们一步一步的走 由于这两个人是等价的 一个...原创 2019-12-20 16:33:11 · 283 阅读 · 0 评论 -
UVa 437 巴比伦塔(The Tower of Babylon)
分析: 一个立方体可能有三种高,因此一个立方体可以当三个立方体用,因为立方体是不限数量的 这个时候可以构建一个有向图,在O(n^2)内判断正方体的有向边,利用have_edge判断一个正方体 是否可以放在另一个正方体之上,然后就dp就可以了,dp的状态是 ans = max(dp[j][w] + rec[i][j].h, ans) 这里的ans是已经加好当前这个立方体高度的dp[i][j] 这个转...原创 2019-12-20 16:18:28 · 289 阅读 · 0 评论 -
UVa 1025 城市里的间谍(A Spy in the Metro)
分析: 用dp[i][j] 表示i时刻在j车站需要等待的最小时间 用haveTrain[i][j][0] 表示i时刻在j车站是否有车向右开 用haveTrain[i][j][1] 表示i时刻在j车站是否有车向左开 由于最后的状态是确定的 dp[T][n] = 0; 因此可以考虑从末态推初态 对于一个时间 dp[t][i] t时刻在车站 只能做3种决策 等一分钟 往左行车 (在有车的情况下)...原创 2019-12-06 17:07:47 · 246 阅读 · 0 评论
分享