6.洛谷DP题
文章平均质量分 63
秦始皇吃花椒
这个作者很懒,什么都没留下…
展开
-
[动态规划] 洛谷P1060 开心的金明(01背包裸题)
题目LP1060思路1.状态及指标:d(i,j),遍历到第i个数,还剩钱数,值为乘积 2.状态转移方程: d(i,j)=max{d(i−1,j),d(i−1,j+V[i])+W[i]∗V[i]}d(i,j)=max{d(i−1,j),d(i−1,j+V[i])+W[i]∗V[i]} d(i,j) = max \left\{ d(i-1,j) , d(i-1,j+V[i]) + ...原创 2018-06-22 01:24:00 · 711 阅读 · 0 评论 -
[区间DP] 洛谷P1026 统计单词个数(预处理)
题目LP1026思路本题很明显的是区间DP,但是多了个划分次数的量k,当k还小于kk(题目给的k)的时候就还得继续划分。没关系,本题常数小,状态上还可以加个k。 1.状态定义:d(i,j,k),区间[i,j]内已经划分了次数k时,最大的单词数。 2.状态转移: (1).当k = kk时,直接计算区间[i,j]的单词数即可。 d[i][j][k]=c[i][j]d[i][j]...原创 2018-07-16 21:04:21 · 203 阅读 · 0 评论 -
[线性DP] 洛谷P1508 Likecloud-吃、吃、吃(多阶段决策)
题目LP1508思路紫书例题单向TSP翻版,甚至还更简单。启示oi不能瞧不起简单题。 一上场,一看普及/提高-,一看是单向TSP翻版,就想这水题我十分钟秒。。然后拖了一个小时。。 总之OI作为一项高技术难度的活动,即便是很简单的题,也应该有足够的思考和谨慎,再简单的题,像边界处理,小数精度,负数下标访问,字符串这些零零碎碎的东西也会直接让代码WA或者RE。有句话叫,当你...原创 2018-07-11 13:56:54 · 208 阅读 · 0 评论 -
[多维DP] 洛谷P1855 榨取kkksc03(简单加维)
题目思路简单加维即可,本题用记忆化搜索会直截了当一点。 ans=max{dp(i−1,m,t),dp(i−1,m−mt[i],t−tt[i])+1}ans=max{dp(i−1,m,t),dp(i−1,m−mt[i],t−tt[i])+1}ans = max\left\{ dp(i - 1, m, t), dp(i - 1, m - mt[i], t - tt[i]) + 1 \ri...原创 2018-07-11 16:15:01 · 290 阅读 · 0 评论 -
[线性DP] 洛谷P1387 最大正方形(思维定势问题)
题目LP1387思路本题的DP部分和代码实现都很简单,充分迎合了普及/提高-的难度。 但大家都是怎么想出怎么用DP的。。怎么想出状态是正方形的右小角的。。我怎么想不出来。。是OI的题无论什么难度思维难度都这么高吗。。还是我比较笨。。 1.状态定义:d(i,j),(i,j)作为一个正方形的右小角,所形成的正方形的最大边长。 2.状态转移方程: d(i,j)=min{d(i...原创 2018-07-11 17:04:44 · 514 阅读 · 0 评论 -
[线性DP] 洛谷P1020 导弹拦截 (模型:LIS最长上升子序列)
题目题目模型 LIS的解法,大体来说有两种:线性DP1.状态定义:d(i),以位置i的元素结尾的LIS长度。 2.初状态:d[1…n] = 1。 3.答案:d[n]。 4.状态转移方程: d(i)=max{1,d(j)+1|j<i,Aj<Ai}d(i)=max{1,d(j)+1|j<i,Aj<Ai}d(i) = max \left\{1, ...原创 2018-07-05 13:54:22 · 237 阅读 · 0 评论 -
[01背包] 洛谷P1417 烹调方案(价值变换问题)
题目LP1417思路本题乍一看是一道简单的01背包,实则不是,因为物品的价值会随着枚举顺序变换。因此应该选择最优的枚举顺序,使物品价值的损失最少,从而得到最优解。 数学证明:(by tinylic) 如果没有b[i]这个属性的话就是明显的01背包问题。 现在考虑相邻的两个物品x,y。假设现在已经耗费p的时间,那么分别列出先做x,y的代价: a[x]-(...原创 2018-07-12 08:42:49 · 254 阅读 · 0 评论 -
[二维DP] 洛谷P1736 创意吃鱼法(预处理)
题目LP1736思路本题作为一道提高+/省选-的题,基本思路是自己想出来的,拿了90,然后有一个小bug一直没发现,拿来标程对比,改了这个bug然后AC,还是很开心的。 首先,借鉴最大正方形的经验,这种题应该下手画图,不出意外,通过画图找到了状态转移的规律。 首先我们将d(i,j)定义为,(i,j)为一个对角线的右下角或左下角时,最长的对角线代表正方形内无其它1的对角线长度...原创 2018-07-12 10:08:39 · 460 阅读 · 0 评论 -
[线性DP] 洛谷P1091 合唱队形 (LIS)
题目LP1091思路我的思路是,枚举一个人作为最中间的大高个,然后分别计算两边的并且以大高个结尾的最长上升子序列和最长下降子序列。 用LIS的DP做法,复杂度是O(n3)O(n3)O(n^3),对于数据100是远远足够的。当然还可以用LIS的单调栈做法优化到O(n2logn)O(n2logn)O(n^2logn),但是主要目的是练习DP,就不写了。 如果你这道题部分数据卡了的话...原创 2018-07-06 16:51:25 · 253 阅读 · 0 评论 -
[多阶段DP] 洛谷P1164 小A点菜(方法数背包)
题目LP1164思路这道题困了我很久,一直不知道背包的方法数该如何统计,还以为是在背包的算法上进行修改,结果只是将状态的指标函数改成方法数而已了。 1.状态定义:d(i,j),遍历到第i道菜,花光j元的方法数。 2.状态转移:当j==w的时候,可以选择只买这道菜,或者买前面的菜凑足w的钱。当j>w的时候,可以选择买这道菜并且用前面的菜凑j-w的钱,或者买前面的...原创 2018-07-19 10:01:54 · 257 阅读 · 0 评论 -
[二维DP] 洛谷P1156 垃圾陷阱 (状态的定义和转移条件问题)
题目LP1156思路首先注意此处的输入数据处理问题,我们以下的推理都是建立在垃圾按扔入时间t排序好的,所以一定要对输入数据进行处理。 本题显然是个多阶段决策类的问题,那么难点就在于状态的定义。本题的题解的状态定义是多样化的,有用一维就做出来的大佬,普遍是两维数组。但两维的(i,j),大多都是i为垃圾序号,j为所处高度,d为最大生存时间。我用的是少见的一种,i为垃圾序号,j为生...原创 2018-07-16 19:33:48 · 257 阅读 · 0 评论 -
[线性DP] 洛谷1052 过河(线性离散化)(输入数据处理问题)
题目LP1052思路可以看到本题的l很大,不能作为数组索引量。一般情况下考虑两种做法,一种是转变思考状态的方法,把l转移到数组元素值上,另一种离散化。 本题用后者。 首先列出状态转移方程,i指的是线段上的坐标。 d(i)=min{d(i−k)|k∈[s,t]}d(i)=min{d(i−k)|k∈[s,t]}d(i) = min\left\{d(i-k)|k\in [s,t]\ri...原创 2018-07-16 16:44:40 · 424 阅读 · 0 评论 -
[动态规划] 洛谷P1048 采药 (01背包裸题)
题目LP1048思路01背包裸题,不赘述代码#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#define _for(i,a,b) for(int i = (a); i...原创 2018-06-22 01:26:49 · 688 阅读 · 0 评论 -
[动态规划] 洛谷P1616 疯狂采药 (完全背包问题)
题目LP1616思路完全背包裸题代码#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#define _for(i,a,b) for(int i = (a); i<(b);...原创 2018-06-22 01:29:38 · 379 阅读 · 0 评论 -
[动态规划] 洛谷P1049 装箱问题 (01背包)
题目LP1049思路本题唯一难度在于发现,问题的隐藏价值W[i] = V[i]。分清消耗量与价值量,并且有时它们甚至还会相等。 剩下的就是裸01背包。代码#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include &l...原创 2018-06-22 01:33:12 · 255 阅读 · 0 评论 -
[动态规划] 洛谷P1064 金明的预算方案 (01背包)
题目LP1064思路本质就是个01背包,不过是每个状态的决策数从两个变成了五个,只是复杂些而已。 五种决策: 1.不拿本物体。 2.只拿本物体。 3.只拿本物体与附物体1。 4.只拿本物体与附物体2。 5.拿本物体,附物体1与附物体2。 其它与简化版相同。代码#include <cstdio>#include <cstdlib>#i...原创 2018-06-22 01:38:12 · 238 阅读 · 0 评论 -
[线性DP] 洛谷P1140 相似基因(类LCS)(二维滚动数组)
题目LP1140思路很正常的一道DP,如果做过LCS的话思路会比较清晰。 本题的状态转换比较复杂,所以就导致很难掌握合适的枚举顺序,又因为数据量只有100,所以用记忆化搜索直接递归会比较好写。 一会吃完饭回来有空的化写写递推。 做区间DP做糊涂了。。本题递推直接i,j正枚举就行了。。。一会回来写 1.状态定义:d(i,j),从两个序列中各取出i,j个元素,最大相似度。 ...原创 2018-07-08 12:17:10 · 237 阅读 · 0 评论 -
[区间DP] 洛谷P1880 石子合并(NOI1995)(环转化序列)(前缀和)
题目LP1880思路本题的数据量很小。。。就能让我很偷懒地使用一种投机取巧的方法。。 本题如果去掉是个环,那就是个普通的不能再普通的区间DP,参考区间DP例题矩阵链乘。我也刚开始没看到是个环,写完了样例都过不了。。 后来想了一段时间,想过用DAG模型,但是总感觉还是脱离不了区间DP,难不成把DAG魔改一下?。。 最后突然想到,其实可以把环暴力转换成序列,就是一个环的序列形式最多有...原创 2018-07-08 15:33:21 · 174 阅读 · 0 评论 -
[线性DP] 洛谷P1280 尼克的任务
题目LP1280思路乱搞出来的。。。 之前被卡了一上午。。现在突然十几分钟做出来,感觉有点梦幻,我还以为它有多难。。 大体来说,就是很简单的线性DP,两个转移: 1.当当前没有工作开头的时候,空余时间+1,并转移到下一分钟。 2.当当前有工作开头的时候,选择其中的一个工作,并转移到这个工作结束的时间。 本题用记忆话搜索递归比较容易,反正和递推顶死差在一个量级里面。 ...原创 2018-07-08 16:31:04 · 188 阅读 · 0 评论 -
[多阶段DP] 洛谷P1282 多米诺骨牌 (01背包)
题目LP1282思路本题总体不难。。甚至我觉得难度评级应该是普及+/提高。。。但就是做了一上午。。 自己要蠢死啦。。 大体思路是这样的,思考以后就会发现,本题其实是一个纠正差值的问题,拿这样样例举例: 4 6 1 1 5 1 3 1 2可以看到,上面点数之和为9,下面点数之和为11,差值为2(暂不考虑正负)。 而每张牌,都有自己的“可...原创 2018-07-09 13:56:03 · 312 阅读 · 0 评论 -
[区间DP] 洛谷P1063 能量项链(环的处理)
题目LP1063思路做这道题做了一早上。。只能说,做紫书例题做多了,都是LRJ已经想好了所有的细节给出了完美无缺的思路,只是让我去实现一下代码,甚至在代码实现的时候还回去看下std程序。这就养成了上来大大咧咧做,不考虑细节,不仔细演算的坏习惯。。同时还会给一种——这种板子题,瞎JB乱搞也能做出来,不停地改一个参数跑一次测评,就等AC那一下,为什么改都不知道。。看吧,区间DP入门题,...原创 2018-07-16 10:57:48 · 277 阅读 · 1 评论 -
[多维DP] 洛谷P1541 乌龟棋(高端技巧的使用问题)
题目LP1541思路可以看到,本题需要用一个40进制的4位数来表示状态。自然想到了基金管理,自然就想到了两种方法:四十进制数和状态池。 显然本题用40进制数,数组会太大(40^4=2560000),所有考虑用状态池。写的也很顺利,然后TLE了一半的点。 而正解就是个简单的多维状态,用多维数组来表示。 启示:可以说,在noip阶段,紫书上的题很难很难。绝大多数的题用到的技巧,都...原创 2018-07-15 16:49:37 · 242 阅读 · 0 评论