自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

OI - IceCab

about oi

  • 博客(49)
  • 收藏
  • 关注

原创 [背包DP] 洛谷P2066 机器分配 (最小字典序的最优方案)

题目总公司拥有高效设备M台,准备分给下属的N个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M≤15,N≤10。分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M。 INPUT 第一行有两个数,第一个数是分公司数N,第二个数是设备台数M。 接下来是一个N*M的矩阵,表明了第 I个公司分配 J台机...

2018-07-23 14:10:02 892 1

原创 [背包DP] 洛谷P1284 三角形牧场(已知推未知的状压DP)

题目LP1284思路首先本题是一个判断DP,那么就考虑指标函数如下定义: d == 0:不存在, d == 1:可以构成边, d == 2:可以构成三角形。 那么就是状态的定义问题,刚开始我想到的是d(i,j,k),分别表示三角形三边。但这样发现1600^3会MLE,所以不可取。 由于根据边的总和s可以根据两边求出第三边,所以这里三边都表示是没有必要的,这里跟技巧枚举那里有点相似...

2018-07-21 15:27:15 329

原创 [背包DP] 洛谷相关题目整理与练习(74题-)

以背包为标签,搜出了这么多题,按难度排序,一道一道做: TODO 题目 难度 备忘录 AC 采药 普及- 01背包模板 AC 开心的金明 普及- 01背包模板 AC 小A点菜 普及- 背包方案数问题 AC NASA的食物计划 普及- 简单的二维费用背包 AC 疯狂的采药 普及-...

2018-07-21 09:33:11 2470

原创 [背包DP] Vijos1037 搭建双塔 (二维费用存在性背包)

题目2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难。为了纪念“9?11”事件,Mr. F决定自己用水晶来搭建一座双塔。Mr. F有N块水晶,每块水晶有一个高度,他想用这N块水晶搭建两座有同样高度的塔,使他们成为一座双塔,Mr. F可以从这N块水晶中任取M(1≤M≤N)块来搭建。但是他不知道能否使两座塔有同样的高度,也不知道如果能搭建成一座...

2018-07-20 14:41:35 195

原创 [背包DP] Vijos1412 多人背包(背包第k优解)(STL使用问题)

题目VP1412 LP1858思路思路见背包九讲。 刚开始考虑直接用stl的queue实现,vijos的第一个题解也是这么实现的,但是仔细一看好像O(NVK)O(NVK)O(NVK)好像不太行,然后vijosAC,洛谷一半的点TLE了。 后面手动用数组实现了一下队列,洛谷也AC了。 这里的问题就是STL的使用,对于复杂度不是很紧的题目,STL可以随便用。但是对于本题洛谷的数...

2018-07-20 14:14:35 321

原创 [背包DP] 洛谷P1757 分组背包

题目LP1757思路背包九讲代码#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <vector>#include <utility...

2018-07-19 21:13:35 438

原创 [背包DP] Vijos1334 NASA的食物计划(二维费用背包)

题目航天飞机的体积有限,当然如果载过重的物品,燃料会浪费很多钱,每件食品都有各自的体积、质量以及所含卡路里,在告诉你体积和质量的最大值的情况下,请输出能达到的食品方案所含卡路里的最大值,当然每个食品只能使用一次。思路背包九讲代码#include <cstdio>#include <cstdlib>#include <cstring>...

2018-07-19 20:56:36 164

原创 [背包DP] CODEVS 3269 混合背包

题目CODEVS 3269思路参考背包九讲,抽象化以后的过程组合起来,简单+简单+简单 != 难。 代码#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#defi...

2018-07-19 20:24:54 213

原创 [多重背包] POJ1276 Cash Machine (二进制优化)

题目有各种不同面值的货币,每种面值的货币有不同的数量,请找出利用这些货币可以凑成的最接近且小于等于给定的数字cash的金额。思路多重背包模板题。 1.朴素的多重背包,每个状态转移时枚举用的某种货币的个数,复杂度:O(C∗∑n[i])O(C∗∑n[i])O(C*\sum n[i]),TLE。 2.二进制优化,背包九讲里面有。 此处应该注意的是,1…n的任意整数用尽量少的几个整数表示...

2018-07-19 15:41:28 409

原创 [动态规划] 《背包九讲》阅读笔记

1.01背包题目与问题解决有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 过程 ZeroOnePack,表示处理一件01背包中的物品,两个参数cost、weight分别表明这件物品的费用和价值。 不同问题的初始化有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背包装满。...

2018-07-19 15:33:47 606

原创 [多阶段DP] 洛谷P1164 小A点菜(方法数背包)

题目LP1164思路这道题困了我很久,一直不知道背包的方法数该如何统计,还以为是在背包的算法上进行修改,结果只是将状态的指标函数改成方法数而已了。 1.状态定义:d(i,j),遍历到第i道菜,花光j元的方法数。 2.状态转移:当j==w的时候,可以选择只买这道菜,或者买前面的菜凑足w的钱。当j>w的时候,可以选择买这道菜并且用前面的菜凑j-w的钱,或者买前面的...

2018-07-19 10:01:54 239

原创 [区间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 191

原创 [二维DP] 洛谷P1156 垃圾陷阱 (状态的定义和转移条件问题)

题目LP1156思路首先注意此处的输入数据处理问题,我们以下的推理都是建立在垃圾按扔入时间t排序好的,所以一定要对输入数据进行处理。 本题显然是个多阶段决策类的问题,那么难点就在于状态的定义。本题的题解的状态定义是多样化的,有用一维就做出来的大佬,普遍是两维数组。但两维的(i,j),大多都是i为垃圾序号,j为所处高度,d为最大生存时间。我用的是少见的一种,i为垃圾序号,j为生...

2018-07-16 19:33:48 241

原创 [线性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 410

原创 [区间DP] 洛谷P1063 能量项链(环的处理)

题目LP1063思路做这道题做了一早上。。只能说,做紫书例题做多了,都是LRJ已经想好了所有的细节给出了完美无缺的思路,只是让我去实现一下代码,甚至在代码实现的时候还回去看下std程序。这就养成了上来大大咧咧做,不考虑细节,不仔细演算的坏习惯。。同时还会给一种——这种板子题,瞎JB乱搞也能做出来,不停地改一个参数跑一次测评,就等AC那一下,为什么改都不知道。。看吧,区间DP入门题,...

2018-07-16 10:57:48 263 1

原创 [多维DP] 洛谷P1541 乌龟棋(高端技巧的使用问题)

题目LP1541思路可以看到,本题需要用一个40进制的4位数来表示状态。自然想到了基金管理,自然就想到了两种方法:四十进制数和状态池。 显然本题用40进制数,数组会太大(40^4=2560000),所有考虑用状态池。写的也很顺利,然后TLE了一半的点。 而正解就是个简单的多维状态,用多维数组来表示。 启示:可以说,在noip阶段,紫书上的题很难很难。绝大多数的题用到的技巧,都...

2018-07-15 16:49:37 228

原创 [动态规划] UVa12105 越大越好(用DP辅助其它算法)

题目思路思路1: d(i,j)表示i根火柴,除以m得余数j的最大可以拼出来的数。 问题:拼数问题需要高精度算法,计算量大。 思路2: d(i,j)表示i根火柴,除以m得余数j的可以拼出来的最大位数。 在计算位数时,顺便记录每一位的最大值。根据贪心,位数越大数字越大越好。 抖机灵题,看看就好代码// UVa12105 Bigger is Better...

2018-07-15 11:06:51 371

原创 [区间DP] UVa1336 修缮长城 (未来费用的计算)

题目思路首先将修缮点按坐标从小到大排序,则已修复的点一定是一个连续的区间。这样就可以用d(i,j,k)表示已经修复完(i,j),机器人现在在k(k=0左边缘,k=1右边缘)时已经发生的总费用。 那么就有一个问题,费用根据时间计算,而状态里没有时间,那下一个修缮点的费用该如何计算? 此处类比颜色长度。由于所有修缮点肯定都要被修,那么我们先把所有的立刻修缮费用加起来作为初状态,每次...

2018-07-15 09:26:09 255

原创 [经典DP] UVa10934 装满水的气球

题目思路常规思路应该是d(i,j),用i个气球有j层楼,最少用多少次测出。 但本题的样例是这样的:Sample Input2 10010 7865994 78659960 184467440737095516163 92233720368547758070 0Sample Output1421More than 63 trials needed.61...

2018-07-14 14:39:54 545

原创 [线性DP] UVa1627 团队分组(二分图与背包)

题目思路前置知识,hdu4751二分图。 首先本题跟hdu4751有点像,a和b不认识,b和c不认识,那么必然就有a和c在一个组。如果这时a和c再不认识,就是无解的情况。 所以上来首先给本题来个二分图判定,并分出连通块,此时的所有连通块都应当是二分图。 根据某一个连通块上的交叉染色,分出这个连通块的team0和team1。 那么现在就有两种选择,第一种是team0成为我...

2018-07-14 13:39:49 912 1

原创 [图论模型] hdu4751 二分图及二分图判断

二分图 二分图,图论中的一种特殊模型。设G=(V,E)G=(V,E)G=(V,E)是一个无向图,如果顶点VVV可以分割成两个互不相交的子集(U,V)(U,V)(U,V),并且图中的每条边(i,j)(i,j)(i,j)所关联的两个顶点分别属于这两个不同的顶点集(i in U,j in V)(i in U,j in ...

2018-07-14 10:05:09 384 1

原创 [多维DP] UVa10618 跳舞机(复杂DP的最优解输出问题)

题目 思路本题的题目可以说是很长了,描述的内容也很多,这还是LRJ精简后的结果。对于此类题,一方面要抓住各个题目规定不能出现的特殊情况,另一方面也要注意在信息量庞大的情况下对题目主干准确头脑清醒的把握。 啥意思呢,第一次我做的时候,根据LRJ的提醒,犄角旮旯的每一个特判都找到地清清楚楚,却没看到最重要的。一直以为消耗能量是“上一只脚……”,而描述的是“这只脚上一次”,就因为这个...

2018-07-13 16:16:40 797

原创 [多维DP] UVa1412 基金管理(九元组及编解码)(状态池)

题目思路本题的基本思路是明确的,用d(i,p)表示经过i天之后,资产组合为p时的现金的最大值。 另外值得注意的是,本题在考虑买股票时要考虑到当前拥有的现金是否足够,因此不是一个DAG最长/最短路问题,因为某些边u->v的存在性依赖于起点到点u的最短路值。也就是说,本题不能像之前的DAG问题一样“反着定义”:如果用d(i,p)表示资产组合为p,从第i天开始到最后能拥有的现金最大值...

2018-07-12 16:35:50 500 3

原创 [二维DP] 洛谷P1736 创意吃鱼法(预处理)

题目LP1736思路本题作为一道提高+/省选-的题,基本思路是自己想出来的,拿了90,然后有一个小bug一直没发现,拿来标程对比,改了这个bug然后AC,还是很开心的。 首先,借鉴最大正方形的经验,这种题应该下手画图,不出意外,通过画图找到了状态转移的规律。 首先我们将d(i,j)定义为,(i,j)为一个对角线的右下角或左下角时,最长的对角线代表正方形内无其它1的对角线长度...

2018-07-12 10:08:39 447

原创 [01背包] 洛谷P1417 烹调方案(价值变换问题)

题目LP1417思路本题乍一看是一道简单的01背包,实则不是,因为物品的价值会随着枚举顺序变换。因此应该选择最优的枚举顺序,使物品价值的损失最少,从而得到最优解。 数学证明:(by tinylic) 如果没有b[i]这个属性的话就是明显的01背包问题。 现在考虑相邻的两个物品x,y。假设现在已经耗费p的时间,那么分别列出先做x,y的代价: a[x]-(...

2018-07-12 08:42:49 244

原创 [线性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 500

原创 [多维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 280

原创 [线性DP] 洛谷P1508 Likecloud-吃、吃、吃(多阶段决策)

题目LP1508思路紫书例题单向TSP翻版,甚至还更简单。启示oi不能瞧不起简单题。 一上场,一看普及/提高-,一看是单向TSP翻版,就想这水题我十分钟秒。。然后拖了一个小时。。 总之OI作为一项高技术难度的活动,即便是很简单的题,也应该有足够的思考和谨慎,再简单的题,像边界处理,小数精度,负数下标访问,字符串这些零零碎碎的东西也会直接让代码WA或者RE。有句话叫,当你...

2018-07-11 13:56:54 202

原创 [集合DP] UVa1252 20个问题(预处理)(技巧枚举)

题目 (题目感觉好萌呀)思路(本题较难) 首先,设“心里想的物体”为W,集合s为已经询问过的特征,集合a为s中确定W具备的特征,其中一定有a∈sa∈sa\in s。设d(s,a)为已经询问了特征集s,且确定W具备的为a时,还需要询问的最小次数。这里考虑如何决策: 决策为下一次提问的特征k,k∈∈\in[0,m)且k不在s中,则下一次提问k时的询问次数是:max{d(s+{k},a...

2018-07-11 11:55:38 176 1

原创 [集合DP] UVa10817 校长的烦恼(多阶段决策)

题目思路依然是集合DP的基本思路,此处的集合是课程的集合。 用s0表示没人教的课程集合,s1表示恰好有一个人教的课程集合,s2表示有至少两个人教的课程集合。由于s0可以由s1和s2算出来,所以不用记录在状态里。(虽然状态很复杂,但能简单一些是一些) 所以用d(i,s1,s2)表示前i个人,在s1,s2情况下的最小花费。此处应该注意的是,子集二进制表示法要求元素由0开始,题目给的...

2018-07-11 10:07:09 203 2

原创 [集合DP] 图的色数(高效枚举子集)

题目给一个无向图G,把图中的结点染成尽量少的颜色,使得相邻结点颜色不同。思路1.状态定义:d(S),结点集S染色,所需要的颜色数的最小值。 2.边界:d(0)=0 3.答案:d(S) 4.状态转移方程: d(S)=d(S−S‘)+1, 其中S‘是S的子集,并且内部无边d(S)=d(S−S‘)+1, 其中S‘是S的子集,并且内部无边d(S) = d(S-S^`...

2018-07-10 21:56:13 1112

原创 [集合DP] 货郎担问题 TSP的DP做法

题目 (目前比较流行的说法是叫旅行商问题)思路直接规定起点和终点都是城市0。(原因慢慢想) 1.状态定义:d(i,S),当前处于i城市,还需访问S中的城市各一次最后回到城市0的最短长度。 2.边界:d(i,{}) = dist(0,i) 3.答案:d(0, {1,2,3,…,n-1}) 4.状态转移方程: d(i,S)=min{d(j,S−{j}+dist(i,j)|j...

2018-07-10 20:33:07 692

原创 [集合DP] UVa10911 最优配对问题 (复杂状态的DP)

题目思路本题首先想到用多阶段决策来做,d(i)表示前i个点两两配对的最小距离和,然后考虑第i个点的决策。假设它和点j配对(j < i),那么状态就转移成了前i-1个点除了点j两两配对的最小距离和。显然这个“前i-1个点除了点j”难以用一个简单的d(i)表示,所以在此处引入集合表示。 LRJ:当发现状态无法转移后,常见的方法是增加维度,即增加新的因素,更细致地描绘状态。 此...

2018-07-10 16:56:39 678 1

原创 [树上DP] UVa1218 完美的服务 (无穷大溢出问题)

题目思路本题的状态和状态转换还是很复杂的,需要好好理解。(我说的不如LRJ清楚系列) 另外提一句,本题给的仍然是无根树,转化一下即可。 本题仍然算一个细节题,代码中包括赋初值,很多处理都很细,有时间的话应该一点一点看代码。代码技巧1.INF溢出的问题: 本题需要将d[i][2]赋初值为无穷大,然后我之前就用了1<<25的INF。1<<3...

2018-07-10 14:42:20 261

原创 [树上DP] UVa1220 Hali-Bula的晚会(多状态DP)(树的最大独立集问题的常用方法)

题目思路预警:本题很烧脑。。即便是看着LRJ的分析,也看的心累。。考虑的情况太多了 (最后求答案时,如果d[0][0] == d[0][1],那么情况也不唯一) 本题最基本的要求是学习到求树的最大独立集问题的常用方法,更一步的要求是好好理解理解LRJ是如何想出这种多状态DP并且能不遗漏细节地写下来的。。。代码#include <cstdio>#...

2018-07-10 11:40:35 196 1

原创 [树上DP] POJ2631 树的最长路径(最远点对)

题目对于一棵n个结点的无根树,找到一条最长路径。换句话说,要找到两个点,使得它们的距离最远。 POJ2631思路和树的重心问题一样,先把无根树转成有根树。对于任意结点i,经过i的最长路就连接i的两棵不同子树u和v的最深叶子的路径。 基本的求法是,先随便找一个点作为根结点转换为无根树后,遍历每一个点,找出当i为根结点时的子树到叶子的最大距离d(j),在根据d(j)求出结点i作...

2018-07-10 09:52:37 3092

原创 [树上DP] POJ1655 树的重心(无根树化有向树)

题目思路本题结点太多,所有用邻接表,应该是用vector,但我用惯了set,想一想set多好啊,自然排序去重,咋用都舒服,写成set的邻接表,TLE。。。 换回vector的邻接表,AC。。。 本题大概有这么三个动作: 1.随便找一个结点作为根,并将无根树转换为有向树。 2.d(i)为当i为根结点时的子树的结点个数。 3.通过d(i),找出树的中心。 而3个动作可以一起...

2018-07-09 20:57:30 303

原创 [树上DP] 树的最大独立子集

题目思路考虑状态表示,最直接的表示方法是,d(i),根结点为i的数的最大独立子集。但是本题给的是无根树,没关系,边的方向不会影响最大独立子集,所有我们随便选一个结点作为根,建立一个有向树就可以。 而对于结点i,只有两个决策: 1.不选结点i,选上它的儿子们。 2.选结点i,选上它的孙子们。 1.状态定义:d(i,),根结点为i的数的最大独立子集元素个数。 2.初状态:所有...

2018-07-09 15:49:36 653 1

原创 [多阶段DP] 洛谷P1282 多米诺骨牌 (01背包)

题目LP1282思路本题总体不难。。甚至我觉得难度评级应该是普及+/提高。。。但就是做了一上午。。 自己要蠢死啦。。 大体思路是这样的,思考以后就会发现,本题其实是一个纠正差值的问题,拿这样样例举例: 4 6 1 1 5 1 3 1 2可以看到,上面点数之和为9,下面点数之和为11,差值为2(暂不考虑正负)。 而每张牌,都有自己的“可...

2018-07-09 13:56:03 298

原创 [线性DP] 洛谷P1280 尼克的任务

题目LP1280思路乱搞出来的。。。 之前被卡了一上午。。现在突然十几分钟做出来,感觉有点梦幻,我还以为它有多难。。 大体来说,就是很简单的线性DP,两个转移: 1.当当前没有工作开头的时候,空余时间+1,并转移到下一分钟。 2.当当前有工作开头的时候,选择其中的一个工作,并转移到这个工作结束的时间。 本题用记忆话搜索递归比较容易,反正和递推顶死差在一个量级里面。 ...

2018-07-08 16:31:04 185

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除