![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
zjtzyrc
这个作者很懒,什么都没留下…
展开
-
hdu1080 Human Gene Functions (动态规划)
http://acm.hdu.edu.cn/showproblem.php?pid=1080 难得徒手撸一题dp……并不能是lcs,只能是有点像刚看到有点迷茫,比较自然地确定一个状态dp[i][j],表示处理到串a的i位,串b的j位然而存在着一个’-‘的设定……先假定为dp[i][j]指的结果的是对齐了的,有一方的结尾是’-‘或者都不是’-‘对于一个状态i,j来说,可以从i-1,j-1或者i,j-原创 2015-04-02 13:47:09 · 316 阅读 · 0 评论 -
UVA10635 Prince and Princess 动态规划
刷刷水题找手感题目大意:有一个n*n的矩阵,从左到右从上到下把格子编号为1,2,……n*n,有两个人从要从左上角格子1采取不同的行动路线到达右下角格子n*n。移动路线除了不能重复外没有限制,因此最终路线是1,2,3……p的一个排列(p是走了几步) 现在给出这两个人的行动序列,求出通过去除路径上的点,两人能一起行走的最长路线。乍一看是LCS,但是空间超,就算优化了空间也会超时间。 注意到题目中的序原创 2015-10-14 17:21:51 · 465 阅读 · 0 评论 -
hdu3672 Caves 树形dp
题目大意:给定一个带权树与若干询问,找出一个以根为起点的遍历路径,使其路径权和小于询问值并且遍历点数尽量多。显然是树形dp。因为询问的值最大有5*10^6,点也有500个,因此dp状态不能定义为当前消耗最多的路径点数,而应反过来,定义为当前点数最小的消耗。对每个点定义状态dp[i][j],i表示遍历了i个点(包括自己),j=0表示遍历结束回到该点,j=1表示不回到该点,则有状态转移方程如下(dpp表原创 2015-10-12 21:34:40 · 577 阅读 · 0 评论 -
hdu5234 Happy birthday 动态规划
dp[i][j][k]为在点(i,j),当前获得量为k的方法是否存在要求解点(i,j),有(i-1,j)和(i,j-1)的答案即可得出(因为题目中只允许向下向右走数据并不强,也并不需要压缩空间#include<iostream> #include<iomanip> #include<cstdio> #include<cstring> #include<sstream> #include<stack>原创 2015-06-01 17:31:41 · 339 阅读 · 0 评论 -
hdu1513 Palindrome 动态规划
求让一个字符串变为回文串所需最少插入字符数定义状态dp[i][j]dp[i][j] 表示从左到右i个字符,从右到左j个字符,要让他们回文需要插入多少字符显然,a[i]==a[j]a[i]==a[j]时,dp[i][j]=dp[i−1][j−1]dp[i][j]=dp[i-1][j-1] a[i]!=a[j]a[i] !=a[j]时,就需要插入一个字符,因此dp[i][j]=min(dp[i−1]原创 2015-05-16 14:50:26 · 309 阅读 · 0 评论 -
hdu1502 Regular Words 动态规划 高精度 打表
一题顶三题,上楼不费劲定义状态dp[i][j][k],ijk分别代表abc的字母的个数那么dp[i][j][k]合法当且仅当i>=j>=k,同时我们只需要输出dp[n][n][n]作为结果 不合法的位置置为0即可dp[i][j][k]=dp[i−1][j][k]+dp[i][j−1][k]+dp[i][j][k−1] dp[i][j][k] = dp[i-1][j][k]+dp[i][j-1][k原创 2015-05-16 10:12:27 · 548 阅读 · 0 评论 -
hdu1494 跑跑卡丁车 动态规划
首先将能量和加速卡这个设定混合一下,把有一张加速卡看做有100%能量 那么,从0能量0加速卡到80能量2加速卡,可以对应为能量0,1,2,3……14 (20能量作1单位) 消耗加速卡即为能量减100接下来,大胆的将状态定为 能量槽、道路段 的组合。 dp[n][m] ,n为当前路段,m为当前能量 那么很容易得出状态转移方程(省略了条件,条件见代码)dp[i][j]=min⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪原创 2015-05-15 22:54:49 · 528 阅读 · 0 评论 -
hdu1011 Starship Troopers(树形dp)
开始尝试写写博客树形dp,111数组大小过不了runtime error好久以为是自己代码错了,赞对一个点n,最多派出m个士兵,得到的最大可能保存在dp[n][m] 计算方法是遍历所有子节点进行背包。第一次做这种稍微复杂的题目做了一天,太鸡了得多练顺便学到了无权图可以用vector保存邻接链表,挺好挺简洁。有权图应该也可以用pair#include <iostream> #include <cst原创 2015-03-31 23:25:08 · 243 阅读 · 0 评论 -
hdu1159 Common Subsequence(LCS)
http://acm.hdu.edu.cn/showproblem.php?pid=1159裸的最长公共子序列a[i]=b[j]时dp[i][j]=dp[i-1][j-1]+1 否则dp[i][j]=max(dp[i-1][j],dp[i][j-1]) dp[i][j]表示a串前i个字符和b串前j个字符的lcs另外子序列(Subsequence)和子串(Substring)是不一样的前者可以不连原创 2015-04-06 11:12:34 · 262 阅读 · 0 评论 -
hdu1243 反恐训练营(动态规划 LCS)
http://acm.hdu.edu.cn/showproblem.php?pid=1243全是变着法子lcs用map储存一个字母对应的分值即可因为不知道数据范围,二维数组开大会炸,于是用模2数组,感觉自己屌屌哒#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<map> #includ原创 2015-04-06 15:14:52 · 674 阅读 · 0 评论 -
hdu1024 Max Sum Plus Plus(动态规划)
做过很多次都没a的题,今天仔细看了一些大牛的博客给强a了。边界处理要注意……#include <iostream> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #include <stack> #include <map> #include <fstream> #define NINF INT_M原创 2015-04-01 19:08:14 · 370 阅读 · 0 评论 -
hdu1158 Employment Planning(动态规划)
还是简单的动态规划 dp[i][j]表示i月有j个员工在职,可以根据i-1月转移而来。#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int needed[13]; int n; int hire,sal,fire; int dp[13][1111]; //dp[i][j]表示第i个月有j原创 2015-04-06 11:14:30 · 419 阅读 · 0 评论 -
hdu1224 Free DIY Tour(动态规划)
http://acm.hdu.edu.cn/showproblem.php?pid=1224看起来很复杂其实是非常简单的dp……题意说明了只有低往高走的情况因此可以从从小到大遍历各点,更新每条边终点的点的最大interest#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<map> #原创 2015-04-06 11:08:44 · 824 阅读 · 0 评论 -
hdu1059 Dividing (多重背包)
题意:将价值分别为1,2,3,4,5,6的6种多个物品平均分两坨所有物品数量加起来不超过2w个很容易想到dp的思路,dp[i]表示是否存在使价值为i的选法,dp[i]=dp[i-j] j为物品的价值。然后对所有物品进行这种循环即可,但是会超时,这时候就需要将大量的相同物品二进制分割,具体的原理需要用心去感受,这是背包九讲中的原文: 方法是:将第i种物品分成若干件物品,其中每件物品有一个系数,这件原创 2015-04-01 21:24:38 · 273 阅读 · 0 评论 -
hdu1081 To The Max(动态规划-最大子矩阵)
20分钟就a了,突然感觉自己好强啊,嗯♂?先是最基本的思路,枚举所有子矩阵,必定超时计算所有子矩阵中的计算有大量重复,尝试定义状态dp[i][j],表示以i行j列元素为矩阵右下角的子矩阵所得到的最大子矩阵和然而这样并不能转移加一个限制,状态dp[i][j][k],i和j同上,k表示这个子矩阵高度为k,那么同一行的dp[i][j][k]就可以由dp[i][j-1][k]转移过来突然发现,这种状态定义,原创 2015-04-03 13:02:06 · 393 阅读 · 0 评论