动态规划
文章平均质量分 90
DP
れもんじよん
这个作者很懒,什么都没留下…
展开
-
区间动态规划专题
例1: P1880 [NOI1995] 石子合并 这应该算是区间DP最典型的题了吧。 首先说一下这道题的小技巧吧 , 因为这个题是一个环上的DP , 因此我们可以断环成链 , 从而可以降低问题的复杂度。具体操作就是复制一段一摸一样的序列放到该序列的后面。 然后再说一下dp的事情 : 1.对于区间间断点的枚举 :倘若我们枚举左端点 , 然后枚举右端点 , 然后再从左端点到右端点中枚举间断点 , 这样就会使得答案不能完全覆盖(意思就是有一些状态在更新时用到的之前的状态没有更新过), 这样就造成了错误解。 其实我原创 2021-03-19 18:46:02 · 136 阅读 · 2 评论 -
背包动态规划专题
01背包: 1.P1048 [NOIP2005 普及组] 采药(裸的01背包板子) Code:(这里用了滚动数组) 在这里插入代码片#include <bits/stdc++.h> using namespace std ; int t , m ; int val[500] , w[500] ; int dp[2][10000] ; int main() { cin >> t >> m ; for(int i = 1 ; i <= m ; i ++原创 2021-03-08 16:25:54 · 281 阅读 · 0 评论 -
线性动态规划专题
例1: P1095 [NOIP2007 普及组] 守望者的逃离 这道题不像是简单的线性DP , 直接用DP是无法求解的 , 因为它多了魔法这一重限制条件。 我首先考虑的是把魔法当作一种状态放在第二维 , 但是这样导致问题根本无法处理 。 看了题解后才知道 , 可以把魔法和正常走路这两个东西完全分离开来处理,简单地说就是两次DP, 一次对魔法 , 一次对正常走路 , 然后再把二者的结果合并起来 , 得出答案。 Code: #include <bits/stdc++.h> using namesp原创 2021-02-28 17:18:20 · 147 阅读 · 0 评论