![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 68
Think_Idea
水滴石穿
展开
-
百度之星程序设计大赛资格赛1001 大搬家
#include #include #define MOD 1000000007using namespace std;int d[1000010];int posMAX=2;int main(){ int T; scanf("%d",&T); memset(d,0,sizeof(d)); d[1]=1; d[2]=2;原创 2015-05-24 10:08:32 · 788 阅读 · 0 评论 -
dp概括(1)
Dynamic programming(动态规划)1、将一个问题分解成许多子问题进行求解,最后再由子问题答案得到原本问题的答案(类似分治法)2、相同的子问题会出现不止一次(与分治法区别)3、将子问题的答案记录下来(可用记忆化搜索,以空间换时间)问题一:用1*2的骨牌填满2*n的格子,共有多少种排法?solve1:以f(n)表示填满2*n格子的方法数,观察最后一格放置骨牌的情形原创 2015-08-16 10:33:57 · 519 阅读 · 0 评论 -
hdu2457 DNA repair(AC自动机+dp)
题目链接:点击打开链接题意描述:给定一些带有病毒的DNA序列,然后给出一串DNA,问最少修改多少个字符使DNA中不含有带病的序列?解题思路:AC自动机+dp分析:首先这是一个多字符串问题,可以想到使用AC自动机,其次问最少需要修改多少字符,显然我们可以考虑使用dpdp[i][j]:表示长度为i的字符串在AC自动机中状态为j时所需要的最小修改在状态转移方程为:dp[i+1][原创 2015-09-03 16:01:57 · 603 阅读 · 0 评论 -
hdu2825 Wireless Password(AC自动机+状压dp)
题目链接:这里写链接内容 题目描述:给定n、m、k,其中n为密码的长度,m为已知串的数量,k为密码中应该包含的已知串的数量,问密码有多少种可能?解题思路:AC自动机+状压dp 状态:dp[i][j][k] 其中i为密码的长度,j为当前在AC自动机中所处的状态,k为包含的已知串的信息,k转化为二进制,如果第x位为1则说明包含第x个已知串 状态转移方程: dp[i+1][next1[j][u]原创 2015-09-03 19:26:30 · 563 阅读 · 0 评论 -
hihocoder Hamiltonian Cycle(记忆化搜索+剪枝)
题目链接:点击打开链接题意描述:给定一个有向图,求图中哈密顿回路的数量。哈密顿回路,具体到本题中即从某一个点开始经过所有的点一次后再回到该点的不同路径数。对于这个不同需要注意两点:如果我们将路径经过的点按顺序写下,比如当n=3时,若存在123和231。此时,我们认为这两条路径是同一条哈密顿回路。而123和213则是不同的哈密顿回路。若两个点之间有多条边,经过不同原创 2015-09-14 16:19:21 · 539 阅读 · 0 评论 -
hdu2196 Computer(树上最长路径 dp)
题目链接:点击打开链接题意描述:给定一棵树,树上每条边的有一个权值,问从任意一个点出发能走得最长路径是多少?解题思路:树上最长路径 dp1、任意找一个点作为根节点,将无根树转化为有根树2、在dfs过程中更新f[i],g[i],其中f[i]记录以i为节点向下扩展最长路,g[i]为次长路,并用mark标记每个节点最长路的儿子节点3、在dfs1的过程中更新h[i],h[i]表原创 2015-08-26 19:08:33 · 1439 阅读 · 0 评论 -
hdu5418Victor and World(floyd算法+状压dp)
题目链接:点击打开链接题意描述:有n个城市,从1号城市出发经过所有的城市至少一次,然后再回到1号城市所花费最少的代价?解题思路:1、由于每个城市可以经过多次,所以我们先用floyd预处理一下图2、由于n的范围最大为16,所以考虑状压dp,我们可以把所有城市用一个长度为n的二进制表示,0表示未走过,1表示已经走过dp[k][i]:表示当前状态为k,以i为终点的路线,所以转移成为为原创 2015-08-23 11:43:55 · 775 阅读 · 0 评论 -
hdu5313 Bipartite Graph(二分图染色+dp+位运算)
题意描述:有一个n个点m条边的二分图,通过加边使得这张图变成一个边数最多的完全二分图. 最多能够新加多少条边. 注意重边是不允许的.解题思路:1、先对二分图染色(dfs),统计二分图中每个连通块(注意:这个二分图并不一定连通)中黑色和白色的数量(黑、白是相对的,不同连通块之间的黑、白没有联系);2、从每个连通块中选出黑或白的数量作为整个二分图中白色的那组,根据题目描述我们只原创 2015-07-26 17:08:47 · 898 阅读 · 0 评论 -
hdu 2227Find the nondecreasing subsequences(树状数组+dp+离散化)
题目链接:点击打开链接题意描述:给定一个序列,找出其中递增子序列的数量?解题思路:1、dp[i]:表示以元素i结尾的子序列的数量,则d[j]=sum(d[i])+1;其中(j>=i且j的下标大于i)2、此刻我们可以联想到树状数组,按数组下标从小到大的顺序插入元素,那么d[j]就等于sum(j)+1;3、由于数据范围比较大,我们采用离散化处理即可代码:#i原创 2015-08-28 15:03:00 · 556 阅读 · 0 评论 -
hdu5115 Dire Wolf(区间dp)
题目链接:点击打开链接题目描述:现在有一群狼排成一条直线,每匹狼有两个属性:ai表示自身的攻击力,bi表示协助相邻的狼时的攻击力;杀死某匹狼时会受到这个狼自身的攻击和与它相邻的两匹狼的协助攻击。杀死某匹狼后,原来与这匹狼相邻的两匹狼变成相邻的。问杀死所有狼所受的最小攻击是多少?解题思路:区间dp状态转移方程dp[i][i]=a[i]+b[i-1]+b[i+1] //(i=原创 2015-08-14 15:53:48 · 950 阅读 · 0 评论 -
hdu5135 Little Zu Chongzhi's Triangles(状态压缩dp)
题目链接:点击打开链接题意描述:给定n(3=解题思路:刚开始暴力搜索发现当n=12时最多可以组成4个三角形,如果暴力搜索O(4^12==2^24)果断tle所以考虑动态规划,由于n最大为12所以我们可以用二进制 表示是否要某节木棍。先预处理出每种可能的三角形,然后动态规划即可代码:#include #include #include #include usi原创 2015-08-15 16:12:40 · 491 阅读 · 0 评论 -
hdu5119 Happy Matt Friends(dp)
题目链接:点击打开链接题目描述:给出n个数,求从这n个数中任意取出一些数(至少取一个)相互异或之后大于m的方案数?解题思路:分析由于n采用动态规划的思想dp[i&1][j]=d[(i-1)&1][j]+d[(i-1)&1][j^a[i]];由于40*10^6太大,所以此处我们采用滚动数组代码:#include #include using namespace std;co原创 2015-08-14 18:54:43 · 652 阅读 · 0 评论 -
uva12563 Jin Ge Jin Qu hao
题目描述:从n首歌中选取一定数量的歌,每首歌需要一定的时间演唱:1、要求在不超过时间st-1的条件下,选取的数量最多;2、其次在数量相同的情况下,要求歌曲时间总和最大。解题思路:本质0、1背包问题,将每个歌曲的时间视为物品体积,价值赋值为1,背包容量为st-1如何在数量最多的基础上求解歌曲时间总和最大?在动规的过程中记录更新即可:1、当前状态比已求的的数量还原创 2015-07-27 20:00:07 · 783 阅读 · 0 评论 -
hdu5009 Paint Pearls(离散+线性dp)
题目链接:点击打开链接题意描述:现有一串珍珠(直线)对珍珠进行染色,给定目标颜色,每次染色可以染一段连续的区间,消耗的代价为连续区间内颜色的种类数的平方,问代价最小多少?此题数据估计比较弱吧,O(n^2)的时间复杂度竟然能过,n可是5w呀解题思路:dp预处理:首先对连续的相同颜色进行压缩(如果连续且颜色相同则相当于一个),然后对颜色进行离散化(便于标记)dp处理:dp[i]表示原创 2015-08-24 11:33:38 · 657 阅读 · 0 评论 -
hdu5366 The mook jong(动规或记忆化搜索)
题目链接:点击打开链接问题描述ZJiaQ为了强身健体,决定通过木人桩练习武术。ZJiaQ希望把木人桩摆在自家的那个由1*1的地砖铺成的1*n的院子里。由于ZJiaQ是个强迫症,所以他要把一个木人桩正好摆在一个地砖上,由于木人桩手比较长,所以两个木人桩之间地砖必须大于等于两个,现在ZJiaQ想知道在至少摆放一个木人桩的情况下,有多少种摆法。输入描述输入有多组数据,每组数原创 2015-08-08 23:34:36 · 692 阅读 · 0 评论 -
hdu2412 Party at Hali-Bula
题目描述:n个人形成一个关系树,每个节点代表一个人,节点的根表示这个人的唯一的直接上司,只有根没有上司。要求选取一部分人出来,使得每2个人之间不能有直接的上下级的关系,求最多能选多少个人出来,并且求出获得最大人数的选人方案是否唯一。解题思路:模型:树上的最大独立集方法:树形dp分析:dp[u][0]和dup[u][0]表示以u为根的子树中,不选u点得到的最大人数原创 2015-07-29 16:42:29 · 544 阅读 · 0 评论 -
hdu1054 Strategic Game(最小覆盖点-树形dp)
题目链接:点击打开链接题意描述:给一棵树,找最少的点集能把树上的所有边覆盖掉?解题思路:典型的最小覆盖点树形dp即可dp[i][0]:表示如果不选i点则dp[i][0]+=dp[t][1];///表示要选所有的儿子节点dp[i][1]:表示如果选i点则dp[i][1]+=min(dp[t][0],dp[t][1]);///表示选择其儿子节点中较小的情况代码:原创 2015-08-26 10:22:51 · 758 阅读 · 0 评论 -
hdu1520 Anniversary party(最大独立集 树形dp)
题目链接:点击打开链接题目描述:现有一棵树,树上每个结点都有一个权值,问从中选一些点,这些点两两之间不直接连接,问权值最大为多少?解题思路:很裸的一道树上最大独立集问题 树形dp即可dp[i][0]:不选i节点 dp[i][0]+=max(dp[t][0],dp[t][1]);dp[i][1]:选i节点 dp[i][1]+=dp[t][0];代码:#pragma c原创 2015-08-26 10:57:29 · 632 阅读 · 0 评论 -
RMQ(st在线算法模板)
#include#include#includeusing namespace std;#define M 100010#define MAXN 500#define MAXM 500int dp[M][18];/**一维RMQ ST算法*构造RMQ数组 makermq(int n,int b[]) O(nlog(n))的算法复杂度*dp[i][j] 表示从i到i+2^j原创 2015-08-18 21:13:52 · 1067 阅读 · 1 评论 -
poj3659 Cell Phone Network(最小支配集-树形dp)
题目链接:点击打开链接题目描述:给定一棵树,从中选取尽量少的点使每个点要么被选中,要么和被选中的点直接相连?解题思路:树上的最小支配集,树形dpdp[i][0]:选中i作为支配集dp[i][1]:不选i作为支配集,但其子节点覆盖了idp[i][2]:不选i作为支配集,而且其子节点没有覆盖i代码:原创 2015-08-26 12:21:49 · 813 阅读 · 0 评论 -
hdu 5534 Partial Tree(完全背包)
题目链接:点击打开链接题意描述:对于n个结点构成的一棵树,每个结点有一个度。现在给出f(x):表示度x代表的值。现在树上所有结点所对应的f(x)之和最大是多少?分析:根据题意有n个节点构成的树,度数之和为2*(n-1),每个节点的度数至少为1,求何如分配可使f(x)之和最大?我们可以先给每个节点分配一个度,于是剩下(n-2)个度可以随意分配,于是问题转换为:有一个背包大小为原创 2015-12-05 12:16:24 · 463 阅读 · 0 评论