DP&状态压缩DP
DP&状态压缩DP
Ordinary_yfz
知乎个人主页zhihu.com/people/zyf-98-4,现在涉及CV,transfer learning,unsupervised,GAN,REID,OOL很多研究方向,会经常写一些综述/论文阅读笔记。
展开
-
Luogu P1052 过河【DP|简单缩点无数论】
题目链接思路分析#include<cstdio>#include<cstring>#include<algorithm>int f[10000002];int a[102];int main(){ int l, s, t, m; scanf("%d%d%d%d", &l, &s, &t, &m); for (int i = 1; i <= m; i++) scanf("%d", &a[i]);转载 2020-07-27 12:09:36 · 194 阅读 · 0 评论 -
LuoGu P1021 邮票面值设计【DFS|DP|剪枝】
题目链接一道很有意思的搜索题,包含了背包、剪枝优化多种工具。写完还是收获蛮大的确定解题方法首先数据范围很小,搜索是可以用的,那么如果我们有KKK种邮票,我们要确定每种邮票取多少时满足题目中需要的条件,因此对每种邮票的取值进行遍历,如果我们确定了KKK种邮票的取值,那么我们将其视为一个背包问题,很容易求出他能凑出的所有价格,然后找到连续的价格。难点:确定每种邮票的取值范围我们用p[i]p[i]p[i]表示第iii种邮票的取值比较简单的思想我也没想出来 :第一个邮票一定是1,否则1都无法进行拼原创 2020-07-21 23:50:23 · 276 阅读 · 0 评论 -
LuoGu P1020 导弹拦截【O(nlog n)求解LCS问题&一个段最少分为多少下降序列】
贪心+二分允许我啰嗦一下写这篇题解的原因(这里嫌烦可以跳过 看一下嘛QAQ):由于我太弱在看题解中dalao们的思路和代码时没有懂虽然可能有同思路的 但是我当时看的时候没看懂所以想写一篇通俗易懂的题解帮助像我一样看不懂dalao题解的同学理解一下我是借鉴了一篇个人感觉很易懂的博客+直接应用了Dilworth定理才A了的没有Dilworth定理的证明是因为我不会证 想知道的直接问度娘好了(有人跟我说前提要会cdq分治 可是我太弱并不会 有空去看看)这是那篇博客:https://blog.c.原创 2020-07-20 23:35:20 · 294 阅读 · 0 评论 -
POJ 1141 Brackets Sequence【题解报告|有趣的区间dp】
今天很高兴,十几个清华本科和30个左右985专业第一,经过三天的角逐,终于让我拿到了清深的offer,夏令营的第一个收获!可以安心的九推冲击清软了题目大意给一些括号,求让它们合法最少要加上多少括号,并输出加上后的结果,合法的定义:1.空串是合法的2.若S是合法的,则[S]和(S)均是合法的3.若A和B是合法的,则AB是合法的思路分析一道类似的区间dp问题,区间dp问题写的不多,右边这道回文子串算是一个,但是自己思维却是被这道题固化了,遇到最小括号匹配时也想用相同的dp方法来作,先附上我第一遍的原创 2020-07-09 14:15:05 · 351 阅读 · 0 评论 -
POJ 1942 Paths on a Grid【题解报告|DP巧妙的解决组合数问题】
题目大意给定一个矩形网格的长m和高n,其中m和n都是unsigned int32类型,一格代表一个单位,就是一步,求从左下角到右上角有多少种走法,每步只能向上或者向右走解题思路首先题目上说了答案不会超过int型变量,我们可以简单算一下,如果是2∗x2*x2∗x的图,大概xxx在100000左右就会超出int变量的范围,如果是3∗x,,,m∗x3*x,,,m*x3∗x,,,m∗x的图,那么xxx的范围会更小,当1∗x1*x1∗x时,返回x+1x+1x+1,0∗x0*x0∗x时返回111,然后我们讨论m∗原创 2020-07-05 22:18:34 · 389 阅读 · 0 评论 -
POJ 1836 Alignment【巧妙地LCS】
题目大意,令到原队列的最少士兵出列后,使得新队列任意一个士兵都能看到左边或者右边的无穷远处。就是使新队列呈三角形分布就对了。思路分析三角分布无非就是找一个人,在这个人左侧身高递增,这个人右侧身高递减即可。很容易联想到LCS,从左向右求上升子序列dp1[],从右向左求上升子序列dp2[],然后枚举n个点,取dp1[]+dp2[]-1最大的点,但是这样是有问题的,比如51 1 1 1 1 这组数据,其实只需要踢出三个人就够了,也就是说中间两个是可以等高的,要完成这个功能,我们不妨将序列分成两部分,原创 2020-07-05 18:03:10 · 277 阅读 · 0 评论 -
POJ 1661 Help Jimmy【题解报告|DFS|DP】
题目大意场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MAX米,不然就会摔死,游戏也会结束。设计一个程序,计算Jimmy到底地面时可能的最早时间。DFS这道题,爆搜显然是能找到正确答案的,我们从上往下跳,落到一个平台上的时候,原创 2020-07-03 16:13:20 · 327 阅读 · 0 评论 -
POJ 3267 The Cow Lexicon【题解报告|DP】
题目链接题目大意给出一个主串,和一本字典,问最少在主串删除多少字母,可以使其匹配到字典的单词序列。是匹配单词序列,而不是一个单词思路分析主要是知道状态方程的含义dp[i] 表示从message中第i个字符开始,到第L个字符(结尾处)这段区间所删除的字符数,初始化为 dp[L]=0由于我的程序是从message尾部向头部检索匹配,所以是下面的状态方程:if(和字典中的某长度为len的字符匹配成功)dp[i]=min(dp[i],dp[pm]+(pm-i)-len);else dp[i]=转载 2020-06-29 16:12:19 · 167 阅读 · 0 评论 -
Poj 1790 Base Numbers【题解报告|DP】
题目链接题目大意给你一个字符串,里面的前一部分是一个数,后一部分是表示他的进制,问这个字符串可以表示成多少个数。思路分析我们遍历每一个可能的进制组合,比如123412341234,遍历4,34,2344,34,2344,34,234,对每一个进制,用cnt[i]cnt[i]cnt[i]表示前iii位能表示的合法数字的个数,这道题满足最优子结构,即如果假设cnt[i−1]...cnt[0]cnt[i-1]...cnt[0]cnt[i−1]...cnt[0]已经得到了,那么能够从他们中得到cnt[i]c原创 2020-06-25 15:12:24 · 199 阅读 · 0 评论 -
Poj 2378 Tree Cutting【树形dp原来如此简单】
在刚开始准备夏令营机试的时候我就看过树形dp,但是当时由于自己的孱弱被吓到了,一直到今天又遇到了类似的题才真正重新学了一遍,其实过程很简单,就是一遍简单的dfs,在过程中记录参数而已题目大意题目链接情景说的有点复杂,但其实就是让你找出这棵树所有的重心节点。思路分析首先,我们了解下什么是树的重心:对于一棵n个节点无根树,若有一点,当令该点为根的时候,最大节点数最少。也可以说成:删除这个点之后,各连通块的节点数最少,则这一点就是树的重心。了解完重心的定义之后,我们再来看下怎么求出重心:我的做法是转载 2020-06-20 15:42:00 · 346 阅读 · 0 评论 -
POJ-2184 Cow Exhibition 【题解报告】
题目链接题意:每头牛有smart值和funness值,求出在smart值的和>0&&funness值>0的情况下,smart值和funness值的总和最大。分析:转化成01背包问题,每头牛选不选就相当于每件物品选与不选,把牛的smart值看做体积,funness看做价值,则对应dp[j]表示前i件物品放入到体积为j的背包里所达到的最大价值由于有的体积值为负,将背包容量扩大100000,dp[100000]=0就相当于体积不为负时的dp[0]=0,表示体积为0的背包里所达到的原创 2020-06-18 10:52:28 · 330 阅读 · 0 评论 -
Poj-1745 Divisibility【题解报告】
这道题长的确实很像一道搜索题,但是数据范围太大了搜索空间210k2^{10k}210k,显然搜索会爆掉,但是!我们可以发现KKK值很小,这就是这道题的突破口,想要找到最终可以整除KKK的运算结果,我们不妨只存储每次运算结果对KKK取模后的值,需要注意的是−17%7=−3-17\%7=-3−17%7=−3,负数难以存储(我的逻辑比较混乱),我们将其转化为等价的形式(−17%7+7)%7=4(-17\%7+7)\%7=4(−17%7+7)%7=4,这是一种非常常见的对取模进行正化的手段(a%k+k)%k(a\原创 2020-06-16 20:25:48 · 244 阅读 · 0 评论 -
POJ1260-Pearls【贪心的错误与dp的思路】
题目大意大致题意:给出几类珍珠,以及它们的单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠。【规定买任一类的珍珠n个(价格为p),都要支付(n+10)p的钱,即额外支付10p】样例分析例如样例Input的第二个例子:31 101 11100 12需要买第一类1个,第二类1个,第三类100个按常规支付为 (1+10)*10 + (1+10)*11 + (100+10)*12 = 1551元(一共买了102个珍珠)但是如果全部都按照第三类珍珠的价格支付,同样是买102个转载 2020-06-15 11:07:58 · 207 阅读 · 0 评论 -
一起来学数位dp
首先让我们来看一下数位DP这玩意到底是啥,对于一些刚开始练的萌新(我)来说会比较好。数位DP一般他对问题的求解都是与数字上的位数有关,比如统计数字出现个数,有多少个数字之类的,这类问题一般能用数位dp做的,都是可以从小数字推到大数字的。比如我们从第一位往后可以一层一层,逐渐推出我们需要的答案。先来一道简单点的例题windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数?设f(x)f(转载 2020-06-05 16:04:32 · 295 阅读 · 0 评论 -
1157 LITTLE SHOP OF FLOWERS【DP插花】
题目大意您想以最舒适的方式布置花店的橱窗。 您有F束鲜花,每束花的种类不同,并且至少连续订购了许多花瓶。 将花瓶粘在架子上,并从左到右从1到V连续编号,其中V是花瓶的数量,因此花瓶1是最左边的,花瓶V是最右边的花瓶。 这些束是可移动的,并且由1到F之间的整数唯一地标识。这些id号具有重要意义:它们确定花瓶行中花束的出现顺序,因此,束i必须在花瓶中 每当i <j时,花瓶的左侧装有束j。 例如...原创 2020-04-16 09:41:28 · 246 阅读 · 0 评论 -
1042 Gone Fishing[DP/贪心]:钓鱼问题+易错数据集
题目大意题目链接去钓鱼,有n条湖按顺序排列,每条湖初始鱼量为fi,钓一个时间片就减少di条鱼,最小减到0条鱼,每条湖间的行走时间为ti个时间片(一个时间片为5分钟),给定时间h小时(一个小时12个时间片),要求最大的钓鱼数。DP根据题目中的描述:所有数据都是以5分钟为单位的,所以我们也把5分钟作为一个单位, 这样可以方便计算定义dp[i][j]为前i个池塘,总共用时j分钟能钓到最多的鱼的...原创 2020-04-15 19:55:36 · 574 阅读 · 0 评论 -
[区间DP]POJ 1160:Post Office 邮局选址简单证明+详解
题目大意题目链接给出一条直线上的n个坐标表示村庄的位置,然后要在上面建p个邮局,村民优先选择去近的邮局,问所有村庄去邮局的最小距离和是多少?思路分析首先暴搜显然很叼,每个村庄两种状态要么建一个邮局,要么不。23002^{300}2300搜索量,不过搜索可不止是暴搜,可以剪枝吗我不会 ,考虑一下记忆话搜索,这其实是一个有最优子结构的问题。首先我们考虑一下,如果有n1,n2,n3,n4n1,...原创 2020-04-14 18:25:02 · 469 阅读 · 0 评论 -
1742:Coins:部分和问题变形:简单dp+三剪枝(部分和问题通用)
题目大意给你一堆硬币,每种硬币价值不同数目不同,问能凑出小于m的多少种支付方案,思路分析显然是一个部分和问题,其实就是三重循环遍历,加上三个剪枝就够了,一道类似题的题解,三个剪枝看不懂的可以看上面的题解。#include<iostream>#include<string.h>#include<string>#include<vec...原创 2020-04-07 13:10:00 · 237 阅读 · 0 评论 -
1276:Cash Machine:部分和拼凑问题:简单dp+4剪枝
题目大意题目链接思路分析显然是一个多重背包问题,和这道题非常类似,下面的代码就是一个简单dp的过程,无非加了两个剪枝,一旦找到结果值直接返回,凑出来的数大于目标数就break,同时使用一个maxprice记录当前凑出的最大价格。此时速度已经不是很慢了,我们再加入最后一步剪枝,完成从初始三剪枝#include<iostream>#include<string.h&...原创 2020-04-06 14:10:53 · 213 阅读 · 0 评论 -
2479:Maximum sum:失败总结,双向最大和子序列,多种做法汇总
题目大意题目链接给一个序列A,求出最大的d(A)d(A)d(A)思路分析做法1:贪心的做两次最大和子序列,连样例都过不了!贪心的思路在这里是错的做法2:如下的代码,遍历每一个i∣i∈[1,n]i|i\in[1,n]i∣i∈[1,n],将数列一分为2,在每一个部分找最大和子序列,然后相加,思路没错,但是TLE。好了做法2的思路显然需要优化,怎么优化呢?其实我们只需要正向求一遍最大和d...原创 2020-04-05 22:22:15 · 177 阅读 · 0 评论 -
3624 Charm Bracelet:经典背包 内存优化轻松AC
题目大意贝茜去了购物中心的珠宝店,探寻一条魅力手链。 当然,她想用N个(1≤N≤3,402)可用的饰物填充尽可能的最佳饰物。 提供的列表中的每个超级字符i的权重均为Wi(1≤Wi≤400),“合意性”因子Di(1≤Di≤100),最多可以使用一次。 贝西只能支撑重量不超过M(1≤M≤12,880)的手链。思路分析背包问题,一个背包问题以及各种优化写法的详细总结,简单背包,不过为了好看为了好写...原创 2020-04-04 17:00:51 · 363 阅读 · 0 评论 -
1753 Flip Game:状态压缩DP翻转4*4期棋盘 0ms通关
题目大意进阶题题目链接翻转游戏是在一个矩形的4x4场上进行的,在其16个正方形的每个正方形上放置了两个双面棋子。 每一块的一侧为白色,另一侧为黑色,并且每一块都以黑色或白色的一面朝上。 每轮翻转3到5片,从而将其上侧的颜色从黑色更改为白色,反之亦然。 根据以下规则,每轮选择要翻转的棋子:选择16件中的任何一件。将选定的片段以及所有相邻片段翻转到选定片段的左侧,右侧,顶部和底部(如果有)...原创 2020-03-28 13:19:09 · 486 阅读 · 0 评论 -
poj 3278 百炼4001:抓住那头牛!——一维空间抓牛行动:dp+队列
题目大意原题链接农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:1、从X移动到X-1或X+1,每次移动花费一分钟2、从X移动到2*X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?思路分析这水题水了我半...原创 2020-03-25 21:18:16 · 407 阅读 · 0 评论 -
背包问题+部分和问题总结--思维跃进过程+代码
好久之前写了不少背包题,之后做了一段时间没怎么遇到,这两天突然遇到发现自己已经忘光了,还是总结一下方便以后看的好。文章目录一、01背包问题暴力搜索记忆化搜索简洁DP二、完全背包问题普通DPDP优化一、01背包问题暴力搜索虽然明知道暴力搜索一般解决不了问题,但是还是了解一下的好,熟悉这种搜索的策略对思维启发很大。#include<iostream>#include<a...原创 2020-03-22 11:17:10 · 277 阅读 · 0 评论 -
1014 Dividing-简单DP,潇洒AC:如何判断一个序列的任意整数之和是否能凑成某个数?
看了不少题解,各种倍增优化,dfs剪枝,写的还都不明不白的,还是自己写一个的比较好。题目大意Marsha和Bill拥有一系列大理石。 他们希望将藏品分开,以使两者获得相同的份额。 如果所有的大理石都具有相同的价值,这将很容易,因为那样他们就可以将收藏品分成两半。 但不幸的是,有些大理石比其他大理石更大或更漂亮。 因此,玛莎(Marsha)和比尔(Bill)首先为每个大理石分配一个值,即一个介于...原创 2020-03-21 14:21:09 · 365 阅读 · 0 评论 -
poj 3420 百炼 3483 Quad Tiling:图解分析+详细题解
题目大意4*N的方格,你用2∗12*12∗1的矩形来填充,有多少种填充方式。思路分析从简到难依次进行分析记f(k)f(k)f(k)为n=kn=kn=k时的排列总数,f(0)=1f(0)=1f(0)=1n=1n=1n=1的时候,只有一种排列,再乘以一行之前的排列数,即f(1)=1∗f(0)f(1)=1*f(0)f(1)=1∗f(0)n=2n=2n=2的时候,首先考虑第二列是上图...原创 2020-03-19 15:58:38 · 293 阅读 · 0 评论 -
2663 Tri Tiling 完美覆盖,样例分析+详细题解-只需10行代码
描述一张普通的国际象棋棋盘,它被分成 8 乘 8 (8 行 8 列) 的 64 个方格。设有形状一样的多米诺牌,每张牌恰好覆盖棋盘上相邻的两个方格,即一张多米诺牌是一张 1 行 2 列或者 2 行 1 列的牌。那么,是否能够把 32 张多米诺牌摆放到棋盘上,使得任何两张多米诺牌均不重叠,每张多米诺牌覆盖两个方格,并且棋盘上所有的方格都被覆盖住?我们把这样一种排列称为棋盘被多米诺牌完美覆盖。这是一...原创 2020-03-19 12:36:04 · 740 阅读 · 0 评论 -
2836 Rectangular Covering:这是一份事无巨细的题解
题目大意:平面上有 n (2 ≤ n ≤ 15) 个点,现用平行于坐标轴的矩形去覆盖所有点,每个矩形至少盖两个点,矩形面积不可为0,求这些矩形的最小面积。题目链接输入点的数目nnn,和一群点xi,yix_i,y_ixi,yi基本思路首先,点的数目在15以内,这么小的数目要么有大坑要么求状态,比较自然的联想到状态压缩DP。三个问题我们要压缩谁?DP的状态如何发生转移?如何求得...原创 2020-03-17 16:39:51 · 211 阅读 · 0 评论 -
3254 Corn Fields 这题解真的不能再详细了!
题意农场主John新买了一块长方形的新牧场,这块牧场被划分成MMM行NNN列(1≤M≤12;1≤N≤12)(1 ≤ M ≤ 12; 1 ≤ N ≤ 12)(1≤M≤12;1≤N≤12),每一格都是一块正方形的土地。John打算在牧场上的某几格里种上美味的草,供他的奶牛们享用。遗憾的是,有些土地相当贫瘠,不能用来种草。并且,奶牛们喜欢独占一块草地的感觉,于是John不会选择两块相邻的土地,也就是...原创 2020-03-17 13:02:10 · 712 阅读 · 0 评论 -
1185 炮兵阵地:不能再详细了的题解!
题目大意司令部的将军们打算在NM的网格地图上部署他们的炮兵部队。一个NM的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向...原创 2020-03-17 11:10:20 · 564 阅读 · 0 评论 -
2441:Arrange the Bulls全场最直白
题目大意题目传送门有n头牛,每头牛有自己喜欢住的屋子,问使所有牛都住上自己喜欢的屋子有几种可能。思路先说几个变量吧SSS:牛棚的集合,如果有四个牛棚,S=1111S=1111S=1111时表示,使用了所有的牛棚(每个二进制位对应一个牛棚)。涉及到集合的整数表示。d[i][j]d[i][j]d[i][j]:表示牛iii喜欢牛棚jjj,是输入条件之一。dp[S]dp[S]dp[S],本...原创 2020-03-16 22:33:04 · 198 阅读 · 0 评论 -
最大和子序列,最大和子矩阵--玩转最大和问题
最大和子序列这是一个非常原始的数学问题:给出一段序列,选出其中连续且非空的一段使得这段和最大。以下给出几个常用的算法1、穷举法对序列中的所有子段进行遍历求和,通过比较不同子段的和,得到最大的子段和。2、分治法对于序列{a[i] | i = 1,2,3,…,n},取序列中心为分割点,将序列拆分为left:{a[i] | i = 1,2,…,n/2}和right:{a[i] | i = n/...原创 2020-03-12 22:14:16 · 1184 阅读 · 0 评论 -
Poj 1163 The Triangle 为什么我们要用dp?
题目大意给如上一个三角形,求出一条到底边的路径,使得路径上的数字之和最大。解题思路看到题第一想法是搜索,显然搜索是可以解出来的,从顶部开始,不断递归、比较所有路径求出来的和,选最大的。激动的开始撸代码,但是暴力搜索能AC的题不多,事情没有这么简单,上一次遇到爆搜是这道题: sticks,经历了全方位剪枝才AC,那么这道题能剪枝吗?怎么减?就一个三角形减个屁, 专门写了dfs体验一下TLE...原创 2020-03-12 18:04:21 · 124 阅读 · 0 评论 -
状态压缩DP(2)--Poj2686 TRSTAGE - Traveling by Stagecoach
原题链接题目大意有一个旅行家计划乘马车旅行。他所在的国家里共有 mmm 个城市,在城市之间有若干道路相连。从某个城市沿着某条道路到相邻的城市需要乘坐马车。而乘坐马车需要使用车票,每用一张车票只可以通过一条道路。每张车票上都记有马的匹数,从一个城市移动到另一个城市的所需时间等于城市之间道路的长度除以马的数量的结果。这位旅行家一共有nnn张车票,第iii张车票上的马的匹数是tit_iti, 一...原创 2020-03-01 12:44:44 · 217 阅读 · 0 评论 -
初学状态压缩DP
所谓的状态压缩DP,一般指的是针对集合的DP,特别地,对于集合我们可以把每一个元素的选取与否对应到一个二进制位里,从而把状态压缩成一个整数,大大方便了计算和维护。关于集合的整数表示看这里。最经典的问题当属于旅行商问题洛谷也有类似的状态压缩的栗子题TSP问题是NP困难的,没有已知的多项式时间的高效算法可以解决这一问题。不过在程序设计竞赛中还是有可能出现这种范围较小的题目的。所谓的s&g...原创 2020-03-01 11:04:23 · 309 阅读 · 0 评论