5.aoapc2ch9 例题
文章平均质量分 65
秦始皇吃花椒
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[动态规划] UVa12563 劲歌金曲 (01背包问题)
题目思路01背包问题 1.状态定义:(i,j), 遍历到i时,剩余时间为T 2.指标函数:d(i,j), 唱了歌数 3.答案:d(n,1~TT), 边界:d[1][TT] = 0, d[1][TT-time[1]] = 1; 4.状态转移方程: d(i,j)={d(i−1,j),d(i−1,j+time[i]+1)}d(i,j)={d(i−1,j),d(i−1,j+time[...原创 2018-06-21 23:40:42 · 259 阅读 · 0 评论 -
[多维DP] UVa1412 基金管理(九元组及编解码)(状态池)
题目思路本题的基本思路是明确的,用d(i,p)表示经过i天之后,资产组合为p时的现金的最大值。 另外值得注意的是,本题在考虑买股票时要考虑到当前拥有的现金是否足够,因此不是一个DAG最长/最短路问题,因为某些边u->v的存在性依赖于起点到点u的最短路值。也就是说,本题不能像之前的DAG问题一样“反着定义”:如果用d(i,p)表示资产组合为p,从第i天开始到最后能拥有的现金最大值...原创 2018-07-12 16:35:50 · 568 阅读 · 3 评论 -
[区间DP] UVa10003 切木棍 (巧妙的边界处理)(离散化)
题目思路1.状态定义:d(i,j),切割位于切割点i和j之间的木棍需要的最小费用。 2.初状态:d(i,i+1) = 0,A[0] = 0, A[n+1] = L 3.答案:d(0,n+1) 4.状态转移方程: d(i,j)=min{d(i,k)+d(k,j)+A[j]−A[i]}d(i,j)=min{d(i,k)+d(k,j)+A[j]−A[i]}d(i,j) = min...原创 2018-07-06 14:30:09 · 308 阅读 · 0 评论 -
[区间DP] UVa1626 括号序列 (细节题)(递归边界处理)
题目思路本题最重要的状态转移如下: 边界为S为空时,d(S) = 0S为单字符时,d(S) = 1本题的递归边界处理强的地方是,通过普遍性很高的递归设计,从而避免了过多的特判,从而简化了思路和代码。 另外本题的输出最优解方法也值得学习,这是对于DP问题的普遍做法:找符合转移并且d[…new…] = d[…old…]+w[…]的进行递归输出。 1.状态定义:d...原创 2018-07-06 16:11:03 · 379 阅读 · 1 评论 -
[多维DP] UVa10618 跳舞机(复杂DP的最优解输出问题)
题目 思路本题的题目可以说是很长了,描述的内容也很多,这还是LRJ精简后的结果。对于此类题,一方面要抓住各个题目规定不能出现的特殊情况,另一方面也要注意在信息量庞大的情况下对题目主干准确头脑清醒的把握。 啥意思呢,第一次我做的时候,根据LRJ的提醒,犄角旮旯的每一个特判都找到地清清楚楚,却没看到最重要的。一直以为消耗能量是“上一只脚……”,而描述的是“这只脚上一次”,就因为这个...原创 2018-07-13 16:16:40 · 880 阅读 · 0 评论 -
[图论模型] 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 · 449 阅读 · 1 评论 -
[线性DP] UVa1627 团队分组(二分图与背包)
题目思路前置知识,hdu4751二分图。 首先本题跟hdu4751有点像,a和b不认识,b和c不认识,那么必然就有a和c在一个组。如果这时a和c再不认识,就是无解的情况。 所以上来首先给本题来个二分图判定,并分出连通块,此时的所有连通块都应当是二分图。 根据某一个连通块上的交叉染色,分出这个连通块的team0和team1。 那么现在就有两种选择,第一种是team0成为我...原创 2018-07-14 13:39:49 · 1008 阅读 · 1 评论 -
[经典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 · 610 阅读 · 0 评论 -
[区间DP] UVa1336 修缮长城 (未来费用的计算)
题目思路首先将修缮点按坐标从小到大排序,则已修复的点一定是一个连续的区间。这样就可以用d(i,j,k)表示已经修复完(i,j),机器人现在在k(k=0左边缘,k=1右边缘)时已经发生的总费用。 那么就有一个问题,费用根据时间计算,而状态里没有时间,那下一个修缮点的费用该如何计算? 此处类比颜色长度。由于所有修缮点肯定都要被修,那么我们先把所有的立刻修缮费用加起来作为初状态,每次...原创 2018-07-15 09:26:09 · 311 阅读 · 0 评论 -
[集合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 · 222 阅读 · 1 评论 -
[集合DP] UVa10817 校长的烦恼(多阶段决策)
题目思路依然是集合DP的基本思路,此处的集合是课程的集合。 用s0表示没人教的课程集合,s1表示恰好有一个人教的课程集合,s2表示有至少两个人教的课程集合。由于s0可以由s1和s2算出来,所以不用记录在状态里。(虽然状态很复杂,但能简单一些是一些) 所以用d(i,s1,s2)表示前i个人,在s1,s2情况下的最小花费。此处应该注意的是,子集二进制表示法要求元素由0开始,题目给的...原创 2018-07-11 10:07:09 · 257 阅读 · 2 评论 -
[树上DP] UVa1218 完美的服务 (无穷大溢出问题)
题目思路本题的状态和状态转换还是很复杂的,需要好好理解。(我说的不如LRJ清楚系列) 另外提一句,本题给的仍然是无根树,转化一下即可。 本题仍然算一个细节题,代码中包括赋初值,很多处理都很细,有时间的话应该一点一点看代码。代码技巧1.INF溢出的问题: 本题需要将d[i][2]赋初值为无穷大,然后我之前就用了1<<25的INF。1<<3...原创 2018-07-10 14:42:20 · 309 阅读 · 0 评论 -
[动态规划] UVa11584 划分成回文串 (线性DP)(回文串判断)
题目思路1.先进行回文串打表,判断回文串的方法:枚举中心,然后向两边延伸。 2.状态定义:d(i),字符1~i划分成的最小回文串个数。 3.初状态:d[0]=0,d[1..n]=INF。(INF是为了配合状态转移时的max) 4.答案:d[n] 5.状态转移方程: d(i)=min{d(j)+1|s[j+1...i]是回文串}d(i)=min{d(j)+1|s[j+1...i...原创 2018-06-25 00:09:57 · 255 阅读 · 0 评论 -
[动态规划] UVa11400 照明系统设计(线性DP)
题目思路1.首先有结论,每种电压的灯泡,要么全换要么不换,一种电压灯泡部分换部分不换易证是不划算的。 2.状态定义:d(i),灯泡1~i的最小开销。 3.初状态:d[0]=0,d[1]= A[1].K + A[1].L * A[1].C, d[2~n] = INF。 4.答案:d[n] 5.状态转移方程: d(i)=min{d(j)+(s[i]−s[j])∗c[i]+k[i]...原创 2018-06-25 00:43:44 · 309 阅读 · 0 评论 -
[线性DP] UVa1625 颜色长度 (LRJ代码)(多状态DP)
题目思路1.本题可以说是有难度了,首先思路就不好想到,DP有两个状态,两个状态分别有自己的状态转移方程。其次代码实现起来,细节很多,自己尝试写了一下,debug了一下午也没搞出来,只能搬来LRJ的代码了。 2.回顾一下本题的思考过程: 首先,可以想到LCS,因为每次都是从两个序列种的一个拿元素。最基本的状态就想到了,d(i,j),表示从两个序列分别拿走i,j个元素后最小的指标函...原创 2018-07-08 10:54:47 · 315 阅读 · 0 评论 -
[动态规划] UVa1025 城市里的间谍 (DAG的固定起点终点最长短路)
题目思路本题的难点在于抽象,由于时间本身就是一个天然的“序”,所以可以由时间和所在车站组成状态。 1.状态定义:(T,i),在T时刻位于i车站。 2.指针函数:d(T,i),还需在车站等待多长时间。 3.状态转移方程: 取决于对于每个状态,有三种决策: - 等1分钟。 - 乘坐往右开的车,去向右第一个车站。(有车的话) - 乘坐往做开的车,去向左第一个车站。(有车的话)...原创 2018-06-20 00:23:56 · 298 阅读 · 0 评论 -
[动态规划] UVa437 巴比伦塔 (DAG的不确定起点终点的最长路)
题目有n(n≤30)种立方体,每种都有无穷多个。要求选一些立方体摞成一根尽量高的柱子 (可以自行选择哪一条边作为高),使得每个立方体的底面长宽分别严格小于它下方立方体的底面长宽。思路DAG的不确定起点终点的最长路 1.状态及指标函数:d(i),在编号为i的立方体做塔的最底部,所能叠出的最高高度。(包括此立方体) 2.状态转移方程: d(i)=maxd(j)+i.h|(j,i)∈E...原创 2018-06-20 00:52:32 · 503 阅读 · 0 评论 -
[动态规划] UVa1347 旅行 (DAG的固定起点终点的最短路)
题目思路1.抽象(神乎其技):由于从左到右不方便思考,可以将问题转换为,两个人同时从最左点出发,沿着两条路径走,最后都走到最右点,并且除了起点和终点外每个点恰好被一个人走过。 2.状态定义:(i,j),表示1~i已经全部走过,且两个人分别位于i,j(i>j)。 3.指标函数:d(i,j),还需要走的距离。 4.状态转移方程: d(i,j)=min(d(i+1,j)+d...原创 2018-06-20 01:40:11 · 1178 阅读 · 0 评论 -
[树上DP] UVa1220 Hali-Bula的晚会(多状态DP)(树的最大独立集问题的常用方法)
题目思路预警:本题很烧脑。。即便是看着LRJ的分析,也看的心累。。考虑的情况太多了 (最后求答案时,如果d[0][0] == d[0][1],那么情况也不唯一) 本题最基本的要求是学习到求树的最大独立集问题的常用方法,更一步的要求是好好理解理解LRJ是如何想出这种多状态DP并且能不遗漏细节地写下来的。。。代码#include <cstdio>#...原创 2018-07-10 11:40:35 · 245 阅读 · 1 评论 -
[动态规划] 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 · 425 阅读 · 0 评论
分享