
动态规划-----------------------
文章平均质量分 83
Fsss_7
这个作者很懒,什么都没留下…
展开
-
hdu5945Fxx and game
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5945题意:求数x最少经过多少次变换能变为1,(1)如果x%k==0,那么可以x=x/k。(2)x=x-i,(1分析:现在连B题都要单调队列优化dp了。。大意了。我们维护一个变换次数递增的单调队列,然后每次维护在t内然后用队头去更新当前点,如果i%k==0就特判一下就行了。代码:#inclu原创 2016-10-29 22:00:50 · 870 阅读 · 0 评论 -
hdu5787K-wolf Number
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5787题意:求l~r范围内有多少个数满足连续的k位数中不存在重复的数字。分析:数位dp,仔细处理好细节即可。代码:#include#include#include#include#include#include#include#include#include#include原创 2016-08-02 17:27:03 · 867 阅读 · 0 评论 -
51nod1183 编辑距离
链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183题意:中文题。分析:设dp[i][j]表示s前i个字符和t前j个字符的编辑距离。基础dp,注意边界dp[i][0]和dp[0][i]。代码:#include#include#include#include#include#include原创 2016-07-20 20:45:14 · 643 阅读 · 0 评论 -
计蒜客 微软的员工福利(中等)
链接:https://nanti.jisuanke.com/t/11147题意:中文题。分析:中等难度n=100,我们可以树形dp,在计算节点i的时候我们暴力n^2枚举它和儿子们形成的min和max的所有可能,然后进行dp即可。在枚举的时候要考虑清楚。我写得比较麻烦。代码:#include#include#include#include#include#include#原创 2016-07-09 17:46:25 · 737 阅读 · 0 评论 -
Codeforces Round #360 (Div. 1)C - The Values You Can Make
链接:http://codeforces.com/contest/687/problem/C题意:给定n个数和一个k,对于每一个和为k的集合{a[1],a[2],...a[g]}都能凑成若个数。求所有的集合能凑出哪些数。分析:我们设dp[i][j][k]表示前i个数在凑成j的数中能否凑出k,为0/1。那么状态直接转移即可。O(n^3)。代码:#include#include#i原创 2016-07-08 23:01:30 · 575 阅读 · 0 评论 -
hdu5773The All-purpose Zero
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5773题意:给一个n个元素的数组,其中0可以变成任意整数,求最长上升子序列。分析:比赛的时候一直想dp状态,却一直都想不到,其实和另外一题挺像的:要求改变最少个数,使得整个数组严格递增。其实就是将自身和序列要求的结合在一起。比如说这一题,0能变成任意整数,那么0肯定是最厉害的,所有0都要在最长上升子原创 2016-07-29 19:25:51 · 770 阅读 · 0 评论 -
hdu5760Palindrome Bo
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5760题意:给定一个n个元素的数组,求最长的回文子序列并且要求从中间到两边是非递减的,要求输出长度和有多少个本质不同的最长的回文子序列。分析:如果只是要求长度,这题的难度要小好多,直接用a数组和a的逆数组求最长公共不上升子序列即可,有兴趣的可以自己去找题做做。但是这题还要求输出有多少个本质不同的子序原创 2016-07-29 17:46:06 · 733 阅读 · 0 评论 -
hdu5550Game Rooms
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5550题意:有n层楼,每层有p[i]个人喜欢网球t[i]个人喜欢游泳,每层楼只能建一个娱乐场所,没有场所的人要去其他楼,求建好娱乐场所后所有人到离他最近的喜欢的娱乐场所的总和最小。分析:设dp[i][j][0/1]表示第i层建0/1,j代码:#include#include#includ原创 2016-07-19 10:41:16 · 618 阅读 · 0 评论 -
51nod1623 完美消除
链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1623题意:中文题。分析:比较明显的数位dp,但是如果不好好想一下数位dp的状态的话不好处理,我设的是dp[i][j][k]表示当前填第i位,前面填的数字中到当前位置的递增序列有哪些元素比如说前面填了'1235'当前填'?'如果我们填的'?'不是'1,2,3,原创 2016-07-07 23:06:40 · 613 阅读 · 0 评论 -
hdu5758Explorer Bo
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5758题意:给定一棵n个点的树,每次任选两个点,然后覆盖两点间的所有边,要求选择最少的次数覆盖所有的边,在最少次数的情况下要求覆盖边的次数最小。分析:要求选择的次数最小那么显然是从叶子到叶子才会使得总体最少。那么就要将叶子为奇或偶分类讨论,先讨论偶数的情况。我们以一个不是叶子的就节点当根,以每个根为原创 2016-07-27 21:24:25 · 1212 阅读 · 0 评论 -
hdu3506Monkey Party
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3506题意:给定n个猴子坐成环,每个猴子介绍自己需要花费a[i]分钟。每次可以选择两个相邻的两个猴子,然后让他们两个的朋友互相认识花费的时间是这两堆猴子介绍自己的总和,其实就是环形石子合并啦。分析:很明显我们是可以区间dp的,设dp[i][j]表示i~j个猴子全部互相认识需要花费的最少时间,那么dp原创 2016-07-17 15:27:17 · 997 阅读 · 0 评论 -
hdu3516Tree Construction
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3516题意:给定n个点(x,y),并且保证xiyj当i代码:因为题目保证的数据关系和树的生长要求,我们很容易想到是区间dp,但是这是n^3的即dp[i][j]=min(dp[i][k]+dp[k+1][j]+dis(i,k,k+1,j)),这个dp的意义是一颗以(xi,yj)为根的子树包含了i~j所原创 2016-07-17 13:40:39 · 564 阅读 · 0 评论 -
hdu2829Lawrence
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2829题意:给定n,m,有n个站点,m个炸弹能炸掉m段铁路,使得最后剩下的价值最小,计算方法看题目中的计算公式。分析:以前用斜率优化写过一次,这次用四边形优化再写一次。我们设dp[i][j]表示前i段铁路炸j个炸弹的最小价值,那么显然有dp[i][j]=min(dp[k][j-1]+w[k+1][i原创 2016-07-16 19:20:28 · 481 阅读 · 0 评论 -
poj1160Post Office
链接:http://poj.org/problem?id=1160题意:有n个村庄在一条直线上,能建k个邮局,求所有村庄到离它最近的邮局的总和最小。分析:四边形不等式优化dp的第一题。赵爽的动态规划加速原理之四边形不等式不错。对于这题我们设dp[i][j]表示前i个村庄建j个邮局的总和最小为多少,w[i][j]表示在第i个村庄到第j个村庄中建一个邮局并且i~j都去这个邮局的最小距离,那么w原创 2016-07-16 17:20:20 · 629 阅读 · 0 评论 -
Codeforces Round #358 (Div. 2)D. Alyona and Strings
链接:http://codeforces.com/contest/682/problem/D题意:给定两个字符串s和t和一个整数k。求s和t的最长公共子串,并且要求s中的所有子段要和t中所有子段都相同,并且要恰好有k段,题目保证有解。详见样例。分析:设dp[0/1][i][j][k]表示s中前i个字符和t中前j个字符刚好拿了k个子段的长度,0表示s[i]和t[j]这对字符没有用到,1表示s原创 2016-06-18 14:59:51 · 537 阅读 · 0 评论 -
poj1651Multiplication Puzzle
链接:http://poj.org/problem?id=1651题意:给定n个数,求消除掉中间n-2个数最小代价,消除数a[i]的代价为a[l]*a[i]*a[r],a[l]和a[r]是它左右两边最近的剩下的数。分析:设dp[i][j]表示消除i+1~j-1最小代价,那么合并就是dp[l][r]=min(dp[l][k]+dp[k][r]+a[l]*a[k]*a[r])。代码:#原创 2016-07-14 15:19:21 · 319 阅读 · 0 评论 -
hdu5745La Vie en rose
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5745题意:给定一个母串s和一个子串p。问s中有多少个位置可以匹配p,可以不完全匹配,p字符串中的每个位置的字符最多可以变动一次(不变的,与前面的字符交换,与后面的字符交换)。分析:做多校学姿势。xg的题解解释得很好,但是对于我这种没写过这种优化的人来说还是要看代码学习一遍,我说下我的理解吧。首先x原创 2016-07-23 14:37:06 · 1062 阅读 · 0 评论 -
51nod1006 最长公共子序列Lcs
链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1006题意:中文题。分析:基础dp,最长公共子序列,再加个输出过程即可。代码:#include#include#include#include#include#include#include#include#include#inclu原创 2016-07-12 21:06:14 · 529 阅读 · 0 评论 -
hdu5791Two
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5791题意:给定a,b两个数组,求有多少个公共子序列。分析:设dp[i][j]表示a中前i个和b中前j个并且a[i]==b[j]匹配的子序列个数,转移的时候要用前缀和优化一下。代码:#include#include#include#include#include#include#原创 2016-08-02 17:31:34 · 812 阅读 · 0 评论 -
hdu4085Peach Blossom Spring
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4085题意:有n个点m条无向边有边权,给定k,2*k分析:斯塔纳树的题。因为看到k比较小很容易想到用状态压缩表示哪些点已经连通了,那么我们设状态dp[i][j]表示以i为根的树并且已经包含了j状态的点的最小花费,那么转移有:dp[i][j]=min(dp[i][j']+dp[i][j-j'])其中j原创 2016-08-27 14:25:17 · 896 阅读 · 0 评论 -
hdu5716带可选字符的多字符串匹配
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5716题意:中文题。分析:之前补过一次百度之星的复赛,补到这题的时候没去找人问怎么做。后来做了一个XG出的多校hdu5745这个题知道了这种优化,但是当时没有联想到怎么做。直到这次打大连现场赛的时候看到B题。???这TM和百度之星那题不是一模一样?然后就后悔当时没有补完这个题。回到正题,这个题的这种原创 2016-10-19 01:56:26 · 1473 阅读 · 2 评论 -
hdu5909Tree Cutting
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5909题意:给定一棵无根树,统计所有子树的异或和的个数。分析:求出所有子树的异或和,题解的两种方法我都写了一下。第一种是FWT加速卷积O(n*m*logn)。第二种是树分治,因为是无根树,我们可以每次用树dp确定过重心的方案数,然后每次删掉重心就是树分治啦O(n*mlgon)。fwt代码:#原创 2016-10-26 21:38:45 · 830 阅读 · 0 评论 -
hdu5887Herbs Gathering
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5887题意:n个物品的01背包,n分析:比赛的时候看到这题没想法,以为要什么奇淫技巧才能过。虽然看到了出题人说的是随机的数据但是TM加个最优解优化就能将2^n优化到15ms也是没脾气。代码:#include#include#include#include#include#inclu原创 2016-10-01 14:41:39 · 510 阅读 · 0 评论 -
URAL 1519Formula 1
链接:http://ln1.vjudge.net/contest/3#overview题意:给定一个矩阵,每个格子为空格或者有障碍物。求覆盖到所有的空白格的哈密顿回路的方案数。分析:插头dp,换了一种更模块化的写法,手写hash,我用的是4进制的括号匹配表示。因为要求只能有一条回路,那么我们只要确定()括号合并只能在最后一个空格即可。这样就不会产生多余的回路啦。代码:#includ原创 2016-09-08 17:24:07 · 422 阅读 · 0 评论 -
hdu1693Eat the Trees
链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1693题意:给定一个n*m的矩阵,每个格子要么是树要么是空地。每次选择一个环(环上全是树)然后删除这些树,直到删完全部的树。求方案数。分析:基础的插头dp。只要标记每个位置是否有插头即可。代码:#include#include#include#include#includ原创 2016-09-08 14:36:41 · 341 阅读 · 0 评论 -
hdu5898odd-even number
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5898题意:求L~R之间有多少个数满足条件。条件为:奇数的长度为偶数,偶数的长度为奇数,如132(13为奇数长度为2,2为偶数长度为1)如235(2为偶数长度为1,35为奇数长度为2)。分析:简单的数位dp,自己处理好细节就行了。代码:#include#include#include#原创 2016-09-23 20:25:17 · 520 阅读 · 0 评论 -
hdu5834Magic boy Bi Luo with his excited tree
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5834题意:给定一棵树,有点权和边权,点权上的价值只能取一次,多次通过边要花费多次边权,求以每个节点为起点能获得的最大价值。分析:比较经典的一类树形dp,设1为根设g[i][0/1]表示从i出发只向儿子走的最大收获,0表示最终回到了i,1表示最终是在某个子孙中结束的,设f[i][0/1]表示i到i的原创 2016-08-15 13:17:02 · 1965 阅读 · 0 评论 -
hdu5890Eighty seven
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5890题意:给定n个数,q个询问,每次询问要求n个数中去掉a[i],a[j],a[k]然后问是否能在剩下的数中找出10个数使得和为87。分析:询问的次数为10^5然而不同的询问只有20000多一点,所以我们先预处理出所有询问的答案,每一个询问我们可以用背包dp来求解,但是如果直接算背包的话会超时,我原创 2016-09-17 18:27:25 · 1123 阅读 · 0 评论 -
uvalive3620Manhattan Wiring
链接:http://acm.hust.edu.cn/vjudge/problem/11229题意:给定一个n*m的矩阵,矩阵中有两个2和两个3,其他的为0/1,0表示空地,1表示障碍。要求将2连到2,3连到3并且两条线不能相交,求最短距离。分析:大白书轮廓线dp例题,用3进制保存状态,枚举所有转移时的状态。注意新的一行开始时要将上一行最后那个点的状态的轮廓线右移一位。代码:#inc原创 2016-08-13 20:47:42 · 543 阅读 · 0 评论 -
hdu4804Campus Design
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4804题意:给定一个n*m的矩阵,矩阵中有些是障碍点有些是空位置,要求用1*1和1*2的骨牌覆盖整个矩阵并且1*1的骨牌使用的个数在[c,d]之间,求方案数。分析:比较裸的轮廓线dp,直接设dp[i][j][mask][k]表示填到第i行第j列后状态为mask并且1*1使用了k个的方案数。O(n*m原创 2016-08-13 15:21:55 · 465 阅读 · 0 评论 -
uva11270Tiling Dominoes
链接:http://acm.hust.edu.cn/vjudge/problem/33787题意:给定一个n*m的矩阵,求用1*2的骨牌放置满的方案数。分析:轮廓线dp练习题,大白书练习题,设dp[i][j][mask]表示填完(i,j)格子后的状态为mask的方案数。代码:#include#include#include#include#include#include原创 2016-08-12 21:32:15 · 451 阅读 · 0 评论 -
hdu5823color II
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5823题意:给定一个n*n的图,求所有点集的最小染色数。分析:如果一个点集是独立集那么这些点可以只染一个颜色,那么我们就能直接枚举独立集子集然后从另一半子集+1继承过来最小染色数啦。O(3^n)代码:#include#include#include#include#include#原创 2016-08-12 16:01:39 · 547 阅读 · 0 评论 -
bzoj2669: [cqoi2012]局部极小值
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2669题意:中文题。分析:首先观察到这个题的数据小很容易就想到状压,但是怎么状压呢?我们一步一步来处理问题。首先我们要处理的是题目处理的是'X'的位置一定是极小值,'.'的位置只能是非极小值。但是如果有个3*3的矩阵中全是'.',那么我们怎么才能确定中间那个不会是处理成极小值呢?这里选择原创 2016-09-02 21:52:03 · 560 阅读 · 0 评论 -
hdu5731Solid Dominoes Tilings
链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5731题意:给定n*m的矩阵,求用骨牌覆盖且稳定的方案数。稳定的定义是没有一行或一列的缝隙是直接分割整个矩阵的。分析:预处理出所有矩阵为i*j的覆盖方案,然后按列容斥按行递推。预处理可以看骨牌覆盖,然后按列容斥很简单,按行递推就是代码里的b[j]-=b[k]*a[j-k]啦。详见代码。原创 2016-09-09 17:29:06 · 433 阅读 · 0 评论 -
hdu3311Dig The Wells
链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3311题意:n个和尚住的地方,m个其他地方。每个地方挖一口井需要花费q[i]的钱,两个地方连通需要花费对应的边权值。求所有人都能喝到水的最小花费。分析:斯塔纳树。如hdu4085,只要在加一位二进制表示集合内是否已经有水了即可。详见代码。代码:#include#include原创 2016-08-29 13:34:51 · 661 阅读 · 0 评论 -
hdu5807Keep In Touch
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5807题意:给定一个50个点的DAG图每个点有个权值w[i],给定初始3个特工所在的位置是x,y,z这3个城市,每一时刻每个人都得移动到下一个城市,并且要求每一时刻两两之间都能联系但且仅当任意两个城市之间的权值差分析:因为是DAG图我们可以很容易想到设状态[i][j][k]表示当3个人恰好分别在i和原创 2016-08-07 20:58:20 · 768 阅读 · 3 评论 -
hdu4126Genghis Khan the Conqueror
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4126题意:给定n个点的m条边,其中有q条边中的一条一定会变大(每一条变大的概率相同),求变大之后最小生成树边权和的期望。分析:最小生成树+树形dp的好题。首先我们要确定最初的最小生成树是有哪些边组成的,然后对于每一条可能变大的边进行判断,这样变大的边就会被分为两类A:变大的边不是最小生成树中的边,原创 2016-08-05 23:21:02 · 504 阅读 · 0 评论 -
hdu5749Colmerauer
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5749题意:中文题意。分析:如题解所说求出每个元素的a,b,c,d之后计算贡献的系数即可。。规律好难找,其实系数为a*b*c*d*(a+b)*(c+d)/4。代码:#include#include#include#include#include#include#include#原创 2016-07-23 22:29:46 · 460 阅读 · 0 评论 -
Codeforces Round #359 (Div. 2)D. Kay and Snowflake
链接:http://codeforces.com/contest/686/problem/D题意:给定一棵以1为根的n个节点的树,然后m个询问,每次询问给定一个x。求在x为根的子树中的质心是谁。x的质心:在这颗子树中删掉它的质心,然后变成若干课小树,要求小树中的最大的size要分析:我们直接预处理出每个点的质心,很容易想到x的质心一定在x和x的size最大的儿子的质心的路径上。为什么呢?画原创 2016-06-30 00:26:33 · 474 阅读 · 0 评论 -
bzoj1087: [SCOI2005]互不侵犯King
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1087题意:中文题。分析:因为n特别小,我们可以直接用状态压缩来表示每一行的状态,然后判断是否可行即可。PS:我的程序跑出来有点慢,应该是对于cal函数的多次计算的问题,其实我们可以预处理出来,然后每次O(1)调用即可。代码:#include#include#include原创 2016-03-19 17:48:19 · 646 阅读 · 0 评论