摘要: 本题做法 区间 DP。 思路 这题我们可以用区间 DP 来求解。令 \(dp[i][j]\) 表示第 \(i\) 个零食到第 \(j\) 个零食所可以得到的最大价值,那么由于 \(dp[i][j]\) 可以由 \(dp[i+1][j]\) 和 \(dp[i][j-1]\) 转移而来(可以自己思考一下 阅读全文
posted @ 2025-08-29 10:32 2789617221guo 阅读(5) 评论(0) 推荐(0)
摘要: 本题做法 模拟,two-pointers。 思路 首先因为题目中的项链是一个环形,而在环形上面处理问题是比较麻烦的,所以我们需要将环形转化为一条直线。我们可以将整个字符串复制一遍放在末尾,然后遍历开头为 \(i=1,2,\cdots, n\) 的项链(即第 \(i\sim i+n-1\) 个珠子)就 阅读全文
posted @ 2025-08-28 14:47 2789617221guo 阅读(6) 评论(0) 推荐(0)
摘要: 本题做法 分组背包 DP。 思路 这题是经典的分组背包模板题。我们可以对每个物品的所属组和对每个组的物品数量及具体物品进行记录,因为每组至多只能选择 1 个物品,所以我们可以枚举组数的同时对当前组内的第几个物品进行枚举,然后接下来就和普通的 0-1 背包 DP 差不多了。 代码 #include<b 阅读全文
posted @ 2025-08-27 20:27 2789617221guo 阅读(5) 评论(0) 推荐(0)
摘要: 本题做法 完全背包 DP。 思路 这题可以转化成完全背包 DP 问题来解答。设 \(dp[i][j]\) 表示枚举到 \(i^4\) 时和为 \(j\) 的最少四次方数个数,则每个四次方数的本身可以抽象为物体的体积,每个物体的价值为 1。 由于 \(1\le m\le 10^5\),所以我们最多只需 阅读全文
posted @ 2025-08-09 15:08 2789617221guo 阅读(5) 评论(0) 推荐(0)
摘要: 本题做法 0-1 背包 DP。 思路 定义 \(dp[i][j]\) 表示在前 $i 首歌曲是否可以达到音量 \(j\)(是的话为 \(\text{true}\),否则为 \(\text{false}\))。因为音量 \(j\) 可以由音量 \((j+c[i])\) 降低 \(c[i]\) 或者由音 阅读全文
posted @ 2025-08-06 14:31 2789617221guo 阅读(43) 评论(0) 推荐(0)
摘要: 本题做法 0-1 背包 DP。 思路 这道题是 0-1 背包 DP 的变种,与模板的区别就是价值等于代价。 其他的跟 0-1 背包 DP 的模板没什么区别的,直接按照模板打上去就行了。 代码 #include<bits/stdc++.h> typedef long long ll; typedef 阅读全文
posted @ 2025-07-29 21:55 2789617221guo 阅读(9) 评论(0) 推荐(0)
摘要: 本题做法 0-1 背包 DP。 思路 这道题是一道变形的 0-1 背包 DP 好题。 题目中说,砝码可以放在左边,也可以放在右边。我们令左盘的砝码重量始终大于或等于右盘的重量,设左盘的重量为 \(m_l\),右盘的重量为 \(m_r\),物品的重量为 \(m_t\)。则有: \[m_l=m_r+m_ 阅读全文
posted @ 2025-07-29 19:46 2789617221guo 阅读(7) 评论(0) 推荐(0)
摘要: 本题做法 0-1 背包 DP。 思路 这题就是简单的 0-1 背包 DP 的小小变形而已。 我们可以定义 \(dp[i][j]\) 为前 \(i\) 个木石中剩余体力为 \(j\) 的最大填补体积。使用双重循环来递推 \(dp\)。若 \(j\ge m_i\),则 \(dp[i][j]=\max(d 阅读全文
posted @ 2025-07-29 19:23 2789617221guo 阅读(9) 评论(0) 推荐(0)
摘要: 本题做法 二分答案,贪心。 思路 我们在读入数据后首先要将任务序列按照 \(s\) 升序排序,因为我们需要优先完成时间紧迫(即完成时间靠前)的任务。随后我们可以开始进行二分答案了。令左边界 \(l=-1\),右边界 \(r=\max{s}\)。对于每一次二分出来的 \(mid\) 使用 check 阅读全文
posted @ 2025-07-23 10:04 2789617221guo 阅读(21) 评论(0) 推荐(0)
摘要: 本题做法 动态规划 DP。 思路 本题其实就是在求前序的最长递增子序列长度和后序的最长递增子序列长度在某个点 \(i\) 之和的最大值。由于本题的数据范围为 \(1\le n\le 100\),直接用 \(O(n^2)\) 的 DP 求最长递增子序列就行了。 代码 #include<bits/std 阅读全文
posted @ 2025-07-10 22:37 2789617221guo 阅读(43) 评论(0) 推荐(0)