![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 63
lecho24
这个作者很懒,什么都没留下…
展开
-
ZOJ 3264 Present for MM
寒假开始了···但是做题没有结束嘤··· 然后是dp专场嘤··· 题意:背包问题,给出背包容量和物品对数,每对物品都有特殊的关系:第一种关系是两个物品都取有价值,若只取一个则失去价值;第二种是两个物品只能取一个,都取则失去价值;第三种是只有当第一个被取时第二个才能被取,但可以单独取第一个物品。 解法:第一种关系只要将两个物品看做一个物品就可以了,第二种关系是分组背包,第三种关原创 2015-02-01 11:29:27 · 385 阅读 · 0 评论 -
HDU 4389 X mod f(x)
题意:求[A,B]内有多少个数,满足x % f(x) == 0。 解法:数位DP。转化为ans = solve(b) - solve(a - 1)。设dp[i][sum][mod][r]表示长度为i,各位和为sum,模mod余r的数的个数。 当在数字后面新添加一位j时,则有dp[i + 1][sum + j][mod][(r * 10 + j) % mod] += dp[i][sum]原创 2015-02-11 19:29:10 · 400 阅读 · 0 评论 -
POJ 2677 Tour
题意:双调欧几里得旅行商问题。算法导论15-1题,从最左边的点严格从左走到右再从右走到左回到起点,所有点都要走且只走一次,求最短路径。解法:定义dp[i][j]表示从i走到j的双调路径,分为两种情况: 当j < i - 1时,dp[i][j] = dp[i - 1][j] + dis[i - 1][i] 当j = i - 1时,dp[i][j] = min{dp[j][k] + dis[j][k]}原创 2015-02-22 12:14:10 · 394 阅读 · 0 评论 -
ZOJ 2283 Challenge of Wisdom
题意:在一个n * m的地图里,有p个宝藏,每次只能向横纵坐标增加的方向走,问最少走几次能把宝藏都拿走。 解法:按横坐标排序,纵坐标的一个不下降子序列就是一条合法路径,要求多少条不下降子序列可以覆盖所有点,这个问题可以转化为最长下降子序列的长度。 代码: #include #include #include #include #include #include #includ原创 2015-02-16 21:39:47 · 669 阅读 · 0 评论 -
SGU 134 Centroid
题意:给出一个树,每个点有一个value,value的意义是去掉这个点之后所有连通分量中点最多的那个连通分量的点数,这棵树的重心为所有点value的最小值,求重心,及重心都有谁。 解法:貌似是个树形dp,不过不太懂树形dp···学了一下也没太明白这题为啥是树形dp···觉得其实是深搜···嗯··· 随便找一个点当做根,我选了点1,每个点的value = max{max{sum[j]},原创 2015-02-16 19:47:40 · 494 阅读 · 0 评论 -
UVA 1474 Evacuation Plan
题意:有一条公路,上面有n个施工队,要躲进m个避难所中,每个避难所中至少有一个施工队,躲进避难所的花费为施工队与避难所的坐标差的绝对值,求最小花费及策略。解法:将施工队和避难所按坐标排序,可以看出有下列递推关系,dp[i][j]表示前j个施工队进入前i个避难所的花费,则有dp[i][j] = min(dp[i][j - 1], dp[i - 1][j - 1]) + |a[j] - b[i]|。由于原创 2015-02-22 11:51:24 · 420 阅读 · 0 评论 -
HDU 4899 Hero meet devil
题意:一段DNA序列s,只包含字符ATGC,长度不超过15,求有多少种长度为n的DNA序列与s的最长公共子序列长度为0~len。 解法:状压dp。 LSC: if(a[i] == b[j]) dp[i][j] = dp[i - 1][j - 1] + 1; else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); dp[原创 2015-02-09 12:15:07 · 1162 阅读 · 0 评论 -
Timus 1746 Hyperrook
题意:在一个n维坐标系中,坐标的范围是0到m - 1,如果两个点坐标只有一个维度的坐标不同则可以相互移动,给出p个点,问任意两个点之间路径为d的个数是多少,答案与p取模。 解法:只需要考虑两个点之间不同的维度的个数,递推方程:f[i][j]表示第i步时维度不同个数为j的路径数,f[i][j] = f[i - 1][j - 1] + f[i - 1][j] + f[i - 1][j + 1原创 2015-02-06 15:34:53 · 333 阅读 · 0 评论 -
POJ 3377 Ferry Lanes
虽然它出现在dp专场里···但是我第一反应是一道最短路题···不过幸好它出现在dp专场里···因为我不怎么会dijstra什么的··· 题意:一条河上有N+1对码头,每个相邻码头之间需要一定时间到达,每对码头之间也需要一定时间到达,如下图: 给出起点码头和终点码头,问最短到达时间。 解法:假设起点码头一定在左边,终点码头一定在右边,那么为了时间最短一定是向右或向上(下原创 2015-02-01 16:30:11 · 804 阅读 · 0 评论 -
UVA 1637 Double Patience
题意:36张扑克,平分成9摞,两张数字一样的可以拿走,每次随机拿两张,问能拿光的概率。 解法:记忆化搜索,状态压缩。一开始我想在还没拿的时候概率是1,然后往全拿光推···样例过不去···后来觉得推反了,改成了深搜,模拟拿牌的过程,九摞牌的状态用9位五进制表示。 代码:#include #include #include #include #include #include #i原创 2015-02-15 00:39:10 · 549 阅读 · 0 评论