
动态规划
风中之神111
我亦飘零久
展开
-
Uva674_Coin Change
题意:用1、5、10、25、50 这五个面值的钱币去凑给定的金额n,问有多少种方案思路:定义状态: d(i, j)表示用前 i 种面值凑 j 共有多少种不同的方案初始状态:题目规定0金额有1种,d(1-5, 0) = 1;前1中面值的凑法只有1种:d(1, 1-n) = 1;状态转移:当j < a[i], d(i, j) = d(i - 1, j - 1);当j >...原创 2019-11-08 16:27:07 · 276 阅读 · 0 评论 -
LCS模板_uva10405
LCS:i = 0或j = 0, f(i, j) = 0;f(i, j) = f(i-1, j-1) + 1, a[i] = b[j];f(i, j) = max(f(i, j-1), f(i-1, j));#include <cstdio>#include <cstring>#include <algorithm>using namespac...原创 2019-11-08 15:12:56 · 264 阅读 · 0 评论 -
Uva116单向TSP
题意:给定一个n*m的矩阵,要求从第一列的任何一行出发,每次沿右或右下或右上到达后面一列,最后到第m列,要求经过的整数之和最小,如果多解要求是解的行字典序最小的。矩阵是环形的,即第一行的上一行是最后一行,最后一行的下一行是第一行。思路:逆向递推。定义状态:d[ i ][ j ] 为(i , j )到最后一列的最小和。边界条件是最后一列,d[ i ][ n] = table[ i ][ n ],...原创 2019-03-08 10:54:56 · 428 阅读 · 5 评论 -
Uva1627团队分组(二分图+DP)
题意:思路:预备知识:二分图。只要A,B不是互相认识,那么肯定在不同的大组里。先根据不认识的关系建立图(只要a,b不是互相认识他们之间就有一条边),这个图可以有多个连通分量。对于每个连通分量,如果是二分图,说明这个连通分量可以分成两个小组(1组和2组),且这两个小组最终会进入不同的大组(A组和B组)。如果不是二分图,说明总要有不认识的人在一个小组,存在矛盾,无解。接下来,需要在...原创 2019-03-20 20:29:20 · 388 阅读 · 0 评论 -
Uva10003切木棍
题意:题目的意思就是,有一根木根,长度为 l ,要给它n刀.分别在c1,c2,c3…cn的位置切.每一刀的消费是当前这段木棍的长度.比如长度10 , 要在2,4,7三个位置切.假设顺序是 4, 2 ,7.切4这个位置的时候,木棍长度10 ,消耗10,然后切2这个位置的时候,它所在的地方木棍长度是4 ,消耗4,切7时消耗6.总共10 + 4 +6 = 20.这种切法也是最省的,如果2....原创 2019-03-12 19:07:57 · 291 阅读 · 0 评论 -
Uva10934装满水的气球
题意你有k个一模一样的水球,在一个n层楼的建筑物上进行测试,你想知道水球最低从几层楼往下丢可以让水球破掉。由于你很懒,所以你想要丢最少次水球来测出水球刚好破掉的最低楼层。(在最糟情况下,水球在顶楼也不会破)你可以在某一层楼丢下水球来测试,如果水球没破,你可以再捡起来继续用。思路在假设你有无数个水球的情况下,那么最少的次数肯定就是用二分的方法:首先在正中间摔下去,如果破的话,说明目标位置在下...转载 2019-03-21 11:17:14 · 285 阅读 · 0 评论 -
Uva1626
题意:一组只由[ ,],(, ),组成的字符串,然后对他进行增添字符,使其匹配;求给他增添的最少的括号的数量,然后输出匹配后的序列.思路:区间DP如果s 形如(s’)和 [s’]可以转移到d[s’]如果s至少有两个字符,可以分成AB,转移到d[A] + d[B];边界是s为空时,d(s) = 0; s为单字符时,d(s) = 1;不管 S 是否满足第一条,都要尝试第二条,否则“[]...原创 2019-03-12 21:26:12 · 294 阅读 · 2 评论 -
UVa1336修缮长城
思路要想最终代价最低,就不能跳跃着修复,也就是经过一段时间后已经修复好的破损应是一段连续区间。每次只有两个决策:向左走或者向右走。根据这个可以设计出状态:dp(i,j,k)表示修好(i,j)后机器人停留在k(0表示在左端,1表示在右端)端的费用。另外, c 值的总和是固定的费用,不论决策如何,最终都是要加的。因此不用加入状态转移。不过最后不要忘了加上它修复某处破损的代价虽然不是定值,但...原创 2019-03-21 21:29:19 · 314 阅读 · 0 评论 -
UVa1412基金管理
题意思路:本题的基本思路是明确的,用d(i,p)表示经过 i 天之后,资产组合为p时的现金的最大值。另外值得注意的是,本题在考虑买股票时要考虑到当前拥有的现金是否足够,因此不是一个DAG最长/最短路问题,因为某些边u->v的存在性依赖于起点到点u的最短路值。也就是说,本题不能像之前的DAG问题一样“反着定义”:如果用d(i,p)表示资产组合为p,从第 i 天开始到最后能拥有的现金最大...原创 2019-03-18 18:34:37 · 370 阅读 · 0 评论 -
UVa12105越大越好
题意思路:第一个思路很容易想到,dp[i][j]代表用了i根火柴,除m余j的最大数。用刷表法,每次选择一个数k放在最右边,用dp[i][j]×10+k去更新dp[i+needs[k]][ ( j×10+k) % m], 其中needs[i]:i 所需要的火柴个数。不过因为有100个火柴,会涉及到大数。导致计算量挺大,890ms。第二个思路不好想。定义状态(i,j)表示用不超过i根火柴拼出...原创 2019-03-22 18:37:37 · 694 阅读 · 1 评论 -
UVa12099书架
题意:给你n(3<=n<=70)本书,每本书有一个高度h和宽度t,你要构造一个三层的书架,把所有书都放上,使书架的总高度*3层中的最大宽度最小。思路:书架有3层,每一层都有高度和宽度,状态里怎么表示呢。首先把书按照高度排序(从高到低),最高的放在第一层,以后再在第一层加书,第一层的高度也不会变了。d[i][j][k]:安排完前 i 本书,第2层书的宽度为j,第3层书的宽度为k时...原创 2019-03-24 12:17:55 · 353 阅读 · 0 评论 -
UVa10817校长的烦恼
题意:某校有m个教师和n个求职者,需讲授s个课程,已知每人的工资c和能教的课程集合,要求支付最少的工资使得每门课都至少有两名老师能教,在职老师不能辞退。思路:定义状态: d[ i ][s0][s1][s2]: 前 i 位老师在当前状态下(s0,s1,s2)的最小花费。其中,s0:0人代课的科目集合; s1:1人代课的科目集合; s2:至少2人代课的科目集合 。s0可以由s1和s2...原创 2019-03-16 10:53:54 · 312 阅读 · 0 评论 -
Uva1331最优三角剖分
题意:输入一个多边形,找一个最大三角形面积最小的三角剖分,输出最大三角形的面积。思路:区间DPdp[i][j]表示从i点到j点的最优值,枚举中间点k。转移方程为dp[i][j]=min(dp[i][j],max(area(i,j,k),max(dp[i][k],dp[k][j])))。注意需要检验选的这个 k 是否有效,如果i-k或j-k两个对角线的任意一条与其他边相交,那么这个k就不能...原创 2019-03-11 17:04:51 · 293 阅读 · 0 评论 -
UVa10618跳舞机
题意长且烦:https://vjudge.net/problem/UVA-1252思路:信息量太杂,理不过来…看了LRJ大佬的代码,nb。定义状态:d[i][a][b][s]:已经踩了 i 个箭头,左右脚在a,b上,上一时刻移动的脚是s。当字母是’.'时,有3种决策:不动,左脚移动,右脚移动。当字母是箭头时:有2种决策,左脚移动到目标,右脚移动到目标。能量的计算: t 时刻的能量需要...原创 2019-03-19 20:43:36 · 382 阅读 · 0 评论 -
UVa12563劲歌金曲
题意:求在给定时间内,最多能唱多少歌曲,在最多歌曲的情况下,使唱的时间最长。思路:01背包把最后一秒留给《劲歌金曲》,算在 t-1 时间内最多能 完整 唱多少歌。因为题目里说了,一首歌要么不唱要么唱完(没看清,被坑了好久),所以初始化的时候就需要赋值为无穷小。但d[0] = 0;其次,怎么求总时间?得到最终的状态之后,从后往前枚举时间,找到歌最多的状态,记录这个时间和状态值。#inclu...原创 2019-03-08 19:01:25 · 268 阅读 · 0 评论 -
Uva11400照明系统设计
题意给定n种类型灯泡,每个灯泡给出其电压v,电源花费k,每个灯的花费c和需求量l,现在通过用电压大的灯泡替换某些电压小的灯泡来减小总花费,求最小的花费。思路:(原文:https://blog.youkuaiyun.com/yanzheshi/article/details/47069189 )首先要说明的是,为求得最小花费,对于某种灯泡,要么全部替换,要么全不替换,这个很容易证明。这个问题难就难在如何找...转载 2019-03-08 20:54:54 · 171 阅读 · 0 评论 -
UVa1220
题意:公司里有n个人形成一个树状结构,即除了老板以外每个员工都有唯一的直属上司。要求选尽量多的人,但不能同时选择一个人和他的直属上司。输出最多能选多少人并判断是否唯一。思路:树的最大独立集问题。就是需要额外判定是否是唯一的。d[u][1]表示以u为根的子树中,选u点能得到的最大人数,f[u][1]判断这种方案是否唯一。d[u][0]表示以u为根的子树中,不选u点能得到的最大人数,f[u][...原创 2019-03-13 21:58:20 · 276 阅读 · 0 评论 -
UVa1625
题意:输入两个长度分别为n和m的颜色序列,要求按顺序合并成同一个序列,即每次可以把一个序列开头的颜色放到新序列的尾部。对于每个颜色c来说,其跨度L(c)等于最大位置和最小位置之差。应使得合并成的序列中所有颜色的L(c)之和尽量小。思路:…无后效性,但是这个代价条件想不出来怎么搞。参看紫书,理解了他的基本思想,但还是码不出来,无奈又看了代码。可以想到用d[ i ][ j ] : 表示A序列的...原创 2019-03-09 18:05:02 · 486 阅读 · 0 评论 -
UVa1218完美的服务
题意:思路:注意:d[u][2]不能设为真的无穷大,因为涉及累加,会溢出。应该设一个它可能取到的最大值n。然后就是,刚开始用vis数组标记,模拟dfs来遍历树,发现不行,因为在求d[u][2]的时候之前的孩子节点已经被标记访问过了,导致d[u][2]根本算不了,应该在参数列表加一个参数表示父节点。#include &lt;cstdio&gt;#include &lt;cstr...原创 2019-03-14 11:47:35 · 240 阅读 · 0 评论 -
UVa1025z城市里的间谍
题意:一个间谍要从第一个车站到第n个车站去会见另一个,在是期间有n个车站,有来回的两个轨道,发车方向相反,间谍身手敏捷,即使方向不同的两列车在同一时间到站,也能完成换乘。让你在时间T内时到达n,并且等车时间最短,输出最短等车时间。思路:先用一个has_train[t][i][0]来表示在t时刻,在车站i,是否有往右开的车。同理,has_train[t][i][1]用来保存是否有往左开的车。动态...原创 2019-03-07 11:21:00 · 163 阅读 · 0 评论 -
Uva348最优矩阵链乘
题意:给出 N 个矩阵(A1,A2,…,An),求完全括号化方案,使得计算乘积(A1A2…An)所需乘法次数最少。并输出方案。思路:经典区间DP。要求的是【0,n-1】的最小代价。且大区间的决策依赖于小区间。矩阵连乘的最后一定有一个最后一次乘法,假设最后一个乘号在第 k 个矩阵后,也就是P = A1 x A2 x … Ak 和Q = A(k+1) x A(k+2) x … x A(n)。只需...原创 2019-03-10 11:26:35 · 234 阅读 · 0 评论 -
UVa1252二十个问题
题目描述:有n个物体和m个特征,每个物体用一个01串表示,第i位为1说明该特征该物体具有。我在心里想一个这n个物体的其中一个,你每次询问一个特征,我回答这个物体是否具备这个特征,当你确定答案后把答案告诉我。假设你采取最优策略,最少询问多少次就能保证猜到?(m<=11,n<=128)思路:集合上的DP因为每个特征不用问两遍,所以题目意思大致是问至少问多少个特征可以把所有物品区分开。...原创 2019-03-19 15:39:18 · 308 阅读 · 0 评论 -
最优配对问题
题意:给出n个点的空间坐标(n为偶数, n<=20), 把他们配成n/2对, 问:怎样配对才能使点对的距离和最小?思路:状态定义:设d(i, s)表示前i个点中,位于集合s中的元素两两配对的最小距离和则状态转移方程 d(i,S)=min{|PiPj|+d(i-1,S-{i}-{j}。改进:状态可以进行压缩,i的值其实隐藏在S中,S中最高位为1的即为i,所以需要一次查找,从n-1...转载 2019-03-15 10:27:43 · 1925 阅读 · 0 评论 -
UVa1347旅行
题意:n个点,坐标给出,设计一条路线,从最左边的点,走到最右边的点,再回来,除最左边的点和最右边的点外,每个点有且经过一次。求最短距离。分析:转换一下思路,不是一个人在走,而是两个人从同一起点出发,走不同的两条路,在终点相遇。假设两个人是 i, j,这样可以定义状态 d[i][j] :一个在 i ,一个在 j ,离终点 n 还要多少距离。但是有一个问题,很难知道下一个要走的点是否被另一个人走...原创 2019-03-07 19:15:43 · 251 阅读 · 0 评论 -
TSP问题(小规模)
问题:货郎担问题提法:有n个城市,用1,2,…,n表示,城i,j之间的距离为dij,有一个货郎从城1出发到其他城市一次且仅一次,最后回到城市1,怎样选择行走路线使总路程最短?思路:假设周游路线是开始于结点1并终止于结点1 的一条简单路径。每一条周游路线都由一条边〈1,k〉和一条由结点k 到结点1 的路径所组成, 其中k∈V-{1} ; 而这条由结点k 到结点1 的路径通过V-{1 ,k}的每...原创 2019-03-15 11:58:19 · 1407 阅读 · 0 评论 -
Hdu1176免费馅饼
数字三角形的变形。Problem Description都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由于小径两侧都不能站人,所以他只能在小径上接。由于gameboy平时老呆在房间里玩游戏...转载 2019-03-06 10:33:55 · 156 阅读 · 0 评论