动态规划
文章平均质量分 86
code_lxm
默默敲码中~~~
展开
-
poj2342(树形dp)
题目 思路:这道是一道比较简单的树形dp题。各员工与其直接上司直接连边然后建树即可 之后,用f[root]表示以root为根的树,选择root所得到的最大快乐度 而g[root]则表示以root为根的树,不选择root所得到的最大快乐度 由于员工与其直接上司在一个派对内同时出席,所以可得f[root]=v[root]+sum(g[child]),g[root]=max(sum(max(f[原创 2017-05-02 15:50:47 · 370 阅读 · 0 评论 -
hdu6249(区间dp)
好像最近写的几篇博客都是关于动态规划的,看来动态规划在acm里面也是常客~~~hdu6249题目链接:点击打开链接大意:给出m个闭区间,各区间左端点和右端点都在[1,n]内,求从中选出k个区间的最大区间并。1≤T≤1001≤K≤M1≤N,M≤20001≤Li≤Ri≤N数据规模见上,对其进行分析,估计这道题应该是用o(n^2)的解法思路:对于区间问题,我首先想到的就是离散化处理,对各个区间端点进行排...原创 2018-05-09 12:58:27 · 1007 阅读 · 0 评论 -
hdu5834(树形dp)
去年蓝桥杯结束以后基本就没有在oj上刷题了,最近突然被老师拉去要打JSCPC(江苏省大学生程序设计大赛),只能在hdu上找找以前ccpc的题目刷刷,顺便复习复习(而且估计也没时间刷那种比较水的题了) 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5834 参考题解:http://www.cnblogs.com/WABoss/p/5771931.h原创 2018-04-22 14:58:54 · 522 阅读 · 0 评论 -
poj2440(矩阵快速幂)
点击打开题目链接 大意:L位由0和1组成的基因,基因中不能包含子串101以及111,求这样的基因数(L 思路:10^8,果断快速幂。然后不包含101及111,不妨用f[i,k]表示满足条件,共含i位,且末三位为k的基因数 然后按k分情况进行递推。例如:f[i,000]=f[i-1,100]+f[i-1,000],f[i,010]=f[i-1,001](不能是101)等等 然原创 2017-05-22 17:42:50 · 254 阅读 · 0 评论 -
poj1949(拓扑,dp)
点击打开题目链接 大意: 有n个任务,第i个任务需要时间xi来完成,并且第i个任务必须在它 “前面的” 某些任务完成之后才能开始。 给你任务信息,问你最短需要多少时间来完成任务。 这道题做完了以后感觉分类不太清晰,看了网上,有说拓扑排序,大多都是说是dp。 我先是想到拓扑排序的,感觉递推自然而然就用上了,dp[i]=max(dp[j]+t[i]) (j是i之前要完成的原创 2017-05-08 17:03:57 · 313 阅读 · 0 评论 -
poj1952(经典dp题)
点击打开题目链接 下面是别处找来的中文翻译版 【问题描述】 “逢低吸纳”是炒股的一条成功秘诀。如果你想成为一个成功的投资者,就要遵守这条秘诀:"逢低吸纳,越低越买"这句话的意思是:每次你购买股票时的股价一定要比你上次购买时的股价低.按照这个规则购买股票的次数越多越好,看看你最多能按这个规则买几次。 给定连续的N天中每天的股价。你可以在任何一天购买一次股票,但是购买时的股价一原创 2017-05-07 21:03:01 · 778 阅读 · 0 评论 -
poj2955(区间dp)
题目 大意:给出一个字符串,求其中最长括号都已匹配好子串(只需知道长度即可) 比较简单的区间dp, 对于f[i][i+1],如果第i个字符与第i+1个匹配则f[i][i+1]=2否则等于0 其他的,f[i][j]=max(f[i][k]+f[k+1][j])(分两段考虑),(形式类似(S1)(S2)) 如果第i个字符与第j个字符匹配,则最优方案中两者可能在同一段, 此时f[i][j]=原创 2017-05-02 23:28:44 · 214 阅读 · 0 评论 -
poj1047(树形dp)
题目 转化下就是给出一棵树求最少要断掉多少条边才能分隔出一个有p个节点的子树 这道树形dp就相对难一点了,我写的中还用到了数组的滚动,整理出来方程即 f[root][j]=min{f2[root][j]+1,f2[root][k]+f[node][j-k]} 前面那部分,即把root->node这条边分隔开来 而后面那部分,即是前面保留k个结点,而以node为根的子树保留j-k个结点原创 2017-05-02 18:57:39 · 212 阅读 · 0 评论 -
poj2282(数位dp)
题目 这题题目比较好理解,就是统计a,b之间的数中数码0~9分别出现的次数 思路: 如果a>b不妨将两者互换顺序,这样就相当于a 减去1~a-1中数码0~9出现次数。 考虑某个数num,令v[i][j]表示该数前i位中j出现的次数,这个比较好算,预处理一下就行了 然后呢,用f[i][j]表示1~该数前i位表示的数中j出现的个数 则通常情况下f[i][j] = f[i - 1][j]原创 2017-05-02 17:30:36 · 310 阅读 · 0 评论 -
poj1014(较复杂的背包问题)
题目:http://poj.org/problem?id=1014 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.StringTokenizer; class Rea原创 2017-04-30 12:18:47 · 422 阅读 · 0 评论 -
poj1631(最长上升子序列 nlogn)
题目见http://poj.org/problem?id=1631 最长上升子序列(LIS)裸题(这么说相信题目看看也懂了吧) 多数据,由于每个数据p 然后就要利用O(nlogn)算法去做 http://blog.csdn.net/zhangyx_xyz/article/details/50949957这个博客讲的还是不错的,比较好懂 然后不多说,照样子写个模板实现实现,代码如下原创 2017-04-30 16:51:39 · 417 阅读 · 0 评论