动态规划
文章平均质量分 78
byijie
这个作者很懒,什么都没留下…
展开
-
hdu 3392 利用滚动数组优化的dp
题意:n个男生,m个女生的身高,把人数较少的一方和另外一方匹配完,求最少的差值。|n-m| 思路:排序,然后动态规划,dp[i][j]代表人数少的一方中的i与另外一方的i+j进行匹配,j //#include #include #include #include #include using namespace std; double dp[2][105]; int n,m; double a原创 2012-12-15 16:21:04 · 810 阅读 · 0 评论 -
hdu 4303 Hourai Jeweled 树形DP
利用排序将O(n^2)的枚举变成O(n)的枚举 #include #include #include #include #include #include #include using namespace std; const int maxn=300005; struct edge { int to,next,col; }oee[maxn<<1],ee[maxn]; int oecnt原创 2013-07-01 23:00:49 · 889 阅读 · 0 评论 -
最大M子段和 辅助数组降低时间复杂度
http://www.cppblog.com/sdfond/archive/2009/06/19/88083.html 最大M子段和 给定n个数求这n个数划分成互不相交的m段的最大m子段和。 经典的动态规划优化的问题。设f(i, j)表示前i个数划分成j段,且包括第i个数的最大m子段和,那么有dp方程: f(i, j) = max { f(i - 1, j) + v[i转载 2013-07-16 19:09:15 · 989 阅读 · 1 评论 -
hdu4313 Matrix 树形DP
开一个dp[maxn][2]的数组,记录以i为根的子树满足要求的最小花费,0代表i没和一个标记连在一起,1代表i和一个标记连在一起。 然后转移即可.... #include #include #include #include #include #include using namespace std; typedef long long ll; const int maxn=100005;原创 2013-07-06 23:52:18 · 852 阅读 · 0 评论 -
POJ3691 第一道AC自动机+DP 指针版+总结
学了编译原理的自动机后理解起来容易多了,对于一个字符串我只关心最后几个字符组成的前缀是AC自动机中的哪个状态节点,然后在AC自动机上进行转移。 我们可以先构造一个AC自动机,然后把各个节点之间的合法联系做成矩阵,这样就方便后面查询了。 需要注意的地方: 1、判断一个节点是否合法,除了看自身外还要看其父节点和其fail指向的第一个节点。(考虑到子串包含的原因) 2、打合法关系表时,打出合法关原创 2013-05-06 21:06:31 · 826 阅读 · 0 评论 -
ZOJ2599 数位统计论文例题
看了论文,又看了别人博客,还是卡了我两天,看来我对字符串的感知能力真是渣....贴个博客造(bao)福(fu)社会。总结一下 把问题先分析清楚,然后充分预处理,会使后面的过程很简单。 字典序在位数相等的情况下可以转换成大小序。 注意别忽视空串,也就是null。 注意首位能否为0。 另外有个有意思的地方.. vector容器太厉害了...比如直接比较v1partial_sum、accumu原创 2013-04-18 23:01:29 · 995 阅读 · 4 评论 -
hdu4539 排兵布阵 状态DP
这题和poj1185http://poj.org/problem?id=1185很像... 首先枚举了一下,对于一行来说有效状态最多169,那么可以DP[i][j][k],第i--1行状态为j第i行状态为k的ans。然后可以枚举j,k,l,DP[i][j][k]=max{DP[i+1][k][l]}+count[k],时间是100*169^3,但是由于部分位置不能摆放士兵使得实际时间远远小于上面原创 2013-03-31 12:21:30 · 1742 阅读 · 1 评论 -
HDU 4336 Card Collector 状态压缩+概率DP
state是压缩的状态,0代表已取,1代表未取, dp[state]代表在state这个状态取完全部卡片的期望步数,然后枚举在这个状态下取的卡片,就可以实现转移,这个dp过程就结束了,答案为dp[(1 下面我们思考另外一种dp思路,dp[state]代表达到state状态所需的期望步数,然后枚举能够到达state状态的状态,这样理论上也能实现转移,答案是dp[0]。但是我个人数学能力有限,算不出原创 2013-03-11 19:48:03 · 945 阅读 · 0 评论 -
POJ3411 状态dp+松弛转移
状态转移有两种,一种是对于一个状态v找出这个状态能够来自哪些状态u,然后更新v,但有时这种转移方法不太好用,那么考虑另一种转移方法,对于一个状态u,我们考虑状态u能够影响的所有状态v,然后不断松弛,像spfa一样... 这题就是第二种转移方法。 另外Inq标记数组确实能节省时间,毕竟减少了节点入队次数... 这题不加inq16ms,加上inq 0ms #include #include #i原创 2013-03-08 21:24:14 · 1171 阅读 · 0 评论 -
POJ2411 状态DP...
好像状态dp分为两步,第一步是找出所有可行状态,最好找出转移关系来(毕竟是压缩的状态,不好转移,直接打出转移关系来就好办了,如果转移比较简单,可以忽略此步),第二步就是dp了,有了转移关系dp过程也就比较清晰了。 这道题就是状态dp,把图案分成网格,然后打出前后两列的状态对应关系,然后普通dp即可。 经典的状态dp问题应该是TSP...MTSP吧...http://blog.sina.com.原创 2013-03-07 21:42:21 · 969 阅读 · 0 评论 -
hdu4616 树形dp,分治思想
刚做这题的时候感觉很麻烦,而别人却说是经典题,当时我一点儿没看出来经典。。。知道今天看了漆子超的论文,里面第一个例题就和这个差不多。 先是分治思想,然后对于每个根节点,大概想像成向下拉了许多条链出来就行了,有个小技巧可以将时间复杂度降低。 #include #include #include #include #include #include using namespace std; typ原创 2013-08-03 21:45:12 · 1081 阅读 · 0 评论