随笔分类 -  动态规划

刘汝佳uva动态规划专题
摘要:题目: 有n种物品,每种物品有x, y两个价值,并且可以有无限多个。 给定s,使得(x1+x2+....)^2 + (y1+y2+....)^2 = s ^ 2。并且物品个数最少。 阅读全文
posted @ 2012-11-19 13:31 kedebug 阅读(720) 评论(0) 推荐(0)
摘要:题意: 有n座城市,Trisha要求在这n座城市旅游k天,从城市1出发,第k天到达城市n。 输入有n*(n-1)行,每n-1行代表i到除了i之外的其他城市航班的时间以及价格。 求出Trisha的最小花费。 思路: 链式dp,dp[i][d]代表第d天到达i城市所需要的最小代价,于是dp[i][d] = min(dp[i][d], dp[j][d-1] + price[j][i][X])。 意思是:第d天到达i城市所花费的代价是,第d-1天到达j城市 + j到i的价格 最小的一个。 阅读全文
posted @ 2012-11-19 10:58 kedebug 阅读(580) 评论(0) 推荐(0)
摘要:题意: 类似于跳棋,当两颗石子左或者右有空位置时,移动。每次转移之后移去经过的石子。 思路: 有12个格子,所以状态最多有2^12=4096个。把每次搜索过的状态存在dp[]数组中,以后再次查询类似的直接返回即可。 阅读全文
posted @ 2012-11-18 20:46 kedebug 阅读(1194) 评论(0) 推荐(0)
摘要:题意: 一些重量递增而且各个面都有颜色的立方体,要将这些立方体堆成一个塔,要求两个接触面同色,而且下面的立方体更重。求塔的最大高度。 阅读全文
posted @ 2012-11-17 00:40 kedebug 阅读(504) 评论(0) 推荐(0)
摘要:题意: 找一个最长(假设长度为2N-1)的子序列,使得前N个元素递增,后N个元素递减。 思路: LIS。从1-n遍历求出最长上升子序列,再从n-1遍历求出逆序的最长上升子序列。 用最朴素的LIS算法是O(n*n),这一题就tle了。于是网上搜索出来一种O(nlogn)的算法。 阅读全文
posted @ 2012-11-16 22:38 kedebug 阅读(1643) 评论(0) 推荐(0)
摘要:题意: 给定2个字符串a, b,求b在a中出现的次数。要求可以是不连续的,但是b在a中的顺序必须和b以前的一致。 思路: 类似于数字分解的题目。dp[i][j]表示:b的前j个字符在a的前i个字符中出现的次数。 似乎这种表示方法司空见惯,但是一开始我还真没能搞懂如何去递推。事情的真相是: 如果a[i] == b[j]则 dp[i][j] = dp[i-1][j] + dp[i-1][j-1] 如果a[i] != b[j]则 dp[i][j] = dp[i-1][j] 阅读全文
posted @ 2012-11-16 11:26 kedebug 阅读(4773) 评论(0) 推荐(0)
摘要:题意: 有t组测试数据,每组测试数据给一个矩阵n,m。 接下来给出n行,每行第一个数字为该行的编号(从1开始),然后给出这行不能走的y坐标。 问从出发点(1,1),到(n,m)有多少种不同的路径。 阅读全文
posted @ 2012-11-15 22:27 kedebug 阅读(504) 评论(0) 推荐(0)
摘要:题意: 一堆石子,两个人每次可以拿X个,X有m种拿法。拿到最后石子的人获胜。 思路: 简单的状态递推dp,dp[i]=true表示有i个石子,首先选的人可以获胜。 阅读全文
posted @ 2012-11-15 15:20 kedebug 阅读(398) 评论(0) 推荐(0)
摘要:题意: 给你n种石头,长x,宽y,高z,每种石头数目无限,一块石头能放到另一块上的条件是:长和宽严格小于下面的石头。问叠起来的最大高度。 阅读全文
posted @ 2012-11-15 14:45 kedebug 阅读(694) 评论(0) 推荐(0)
摘要:题意: 求规定时间内并且时间最小剩余的情况下,最多能吃多少汉堡,有2类汉堡,吃每类汉堡所要的时间分别是n, m。 思路: 多重背包,需要变换的是要把汉堡的个数当成是汉堡的价值。一个汉堡的价值是1。 dp[w] w的背包容量,必须装满最多能拿多少个汉堡。注意按照此时条件来说dp数列并不是递增的(w1, w2装满,w1w2,但是dp[w1]并不一定小于dp[w2]) 阅读全文
posted @ 2012-11-14 12:33 kedebug 阅读(659) 评论(0) 推荐(0)
摘要:第一次做把选择的打印出来的题目,于是还是更新下,把代码贴出来。 题目很简单,为了让打印更加顺利,选择从后往前选择物品。 阅读全文
posted @ 2012-11-14 00:20 kedebug 阅读(370) 评论(1) 推荐(0)
摘要:题意: 有N个矩阵相乘,不同的相乘顺序会有不同的次数,求一种顺序,使相乘的次数最小。 阅读全文
posted @ 2012-11-13 23:37 kedebug 阅读(327) 评论(0) 推荐(0)
摘要:题意: 给你若干硬币,让你分成两份,使其绝对值之差尽量的小。 思路: 算出硬币的总和,然后把背包容量设置为硬币总和的一半,这个背包能拿到的最大价值即是2个人中某个人要拿到的价值。 01背包的思路就可以解决了。 阅读全文
posted @ 2012-11-13 16:37 kedebug 阅读(234) 评论(0) 推荐(0)
摘要:题意: 有N头象,找出其中体重从小到大,智商从高到底的X只,并输出。 思路: 先对于象的体重进行从小到大排序,然后对其智商进行最长下降子序列选择 阅读全文
posted @ 2012-11-13 00:29 kedebug 阅读(214) 评论(0) 推荐(0)
摘要:题意: 求代价最小的一条路径。 思路: 由于要求路径,并且要求输出字典顺序最小的序列。所以逆向求DP,模仿dfs,将降低解题难度。 阅读全文
posted @ 2012-11-12 00:31 kedebug 阅读(468) 评论(0) 推荐(0)
摘要:题意: 给定一个l长得木棍,要把它从给定的n个点截断,每截断一次需要的费用为木棍的长度。 求截断这个木棍所要花费的最小代价。 思路: 典型的区间DP,要额外添加2个点:0和l,于是区间从1不断扩展到n+1,dp[i][j]代表点i到点j所要花费的最大代价。 阅读全文
posted @ 2012-11-11 22:09 kedebug 阅读(241) 评论(0) 推荐(0)
摘要:题意: 有1,5,15,25,50五种货币,问n元最多有多少种兑换方法 阅读全文
posted @ 2012-11-11 19:59 kedebug 阅读(402) 评论(0) 推荐(0)
摘要:UVa 10405 Longest Common Subsequence(最长公共子序列) 阅读全文
posted @ 2012-11-11 18:45 kedebug 阅读(196) 评论(0) 推荐(0)
摘要:题意: 有n个箱子,每个箱子有m的维度,箱子a能装到箱子b里面的条件是,存在一个序列,使a的任意一个维度大小小于b。 求最多能套几层箱子。 阅读全文
posted @ 2012-11-11 11:33 kedebug 阅读(288) 评论(0) 推荐(0)
摘要:题意: 求两个事件序列的最长公共子序列,而题目中输入的是每个事件发生的时间,因而要先根据每个事件发生的时间把事件的序列的找到。 比如如果输入是1 3 4 2,那么实际上事件序列是1 4 2 3 阅读全文
posted @ 2012-11-10 17:13 kedebug 阅读(264) 评论(0) 推荐(0)