动态规划
文章平均质量分 80
huyuncong
这个作者很懒,什么都没留下…
展开
-
最大子矩阵(最大子段和)
说起来惭愧,学了这么久动态规划,还不会求最大子矩阵~要学o(n^3)的求法,首先要弄懂o(n)的最大子段和,因为子段可以看做一维子矩阵。对于最大子段和,每一位置j,前j-1个位置的最大子段和我们都已求出,至于后续的位置,对于当前位置并无影响,而且,子段和必须连续,所以我们只需考虑两种情况1、以该位置为起点,f[j]:=a[j];2、并入前字段和,f[j]:=f[j-1]+a[j];我们只要在这两种情况取最大值,便可得出递推式。另外,如果不需求出每一位置的最大子段和,我们还可以进行空间优化(参见程序中max部原创 2011-05-04 22:01:00 · 898 阅读 · 0 评论 -
【状压dp】connection
整数拆分后状态最多38000+,由于已经连的边不能用,所以把还剩多少边压进状态,也就700+条边,然后记g[s][k]为s状态,省k条边的数学期望,直接列公式转移,n==40显然是要打表的,话说这道题大丰中学出过一次,也依稀记得见过,结果最后还是没想出来...把表全部打出来大概2~3分钟#include #include #include #include #include #d原创 2013-05-26 19:17:45 · 592 阅读 · 0 评论 -
【2012 Multi-University Training Contest 7】部分题
适应acm赛制看来不是我原先想的那么简单...4360双关键字单源最短路这道题我交了10+次,原因是初始化没取最小值...看来确实是太久没在考试状态下写题了,心中竟然还在紧张#include #include #include #include #include const long long oo=1314520LL*13520LL+1;using namespace原创 2013-06-20 21:17:46 · 905 阅读 · 0 评论 -
【dp】Grouping by Prefixes
给出一个大小为n的字符串集合A,需要确定一个大小为m的字符串集合B,要保证能把A集合分成恰好m份非空集合,要求前缀为bi的字符串都被分在第i个集合,同时一个字符串不能分在多个集合。求有多少符合要求的B,同时给出一种方案.第一种思路是建出字母树,那么问题转化为在树上选m个独立的子树覆盖所有的叶子,这个直接做是o(n*m*m)的,所以可以转到dfs序上,压缩字母树的边后dp就可以了,这是一队的算法原创 2013-07-31 20:36:36 · 730 阅读 · 0 评论 -
李其乐 免费的馅饼+郭华阳 新一代打鼹鼠
今天做了一道郭华阳出的模拟题,发现竟然和冬令营的答辩试题如出一辙,只改了一点条件,冬令营时就被什么树状数组+平衡树,坐标移位弄得头晕脑胀,一点也没听懂,结果冤家路窄,这次又只拿了40分,T T重新翻ppt,其实只是优化了转移而已,学了解析几何后,对坐标轴理解更加深刻,这两道题也比较容易理解了。有m只鼹鼠出现在一个1 ~ n的长条上。对于第k只鼹鼠,我们用t[k], w[k], x[k]来描述。即在t[k]时刻,会有一只分值为w[k]的鼹鼠k出现在位置x[k]上。现在你有一个锤头,每一时刻它都停留在一个位置上原创 2011-04-30 16:17:00 · 4121 阅读 · 0 评论 -
三维偏序 树套树&cdq分治
一般的最长上升子序列是二维偏序,所以排序后用线段树维护可以达到nlogn程度,但是如果是三元组呢?因为多了一个偏序关系,所以维护起来相当麻烦。roosephu说了一句经典的:一维快排,二维归并,三维树状数组,就是一维排序x后,再而在快排保证前一段x小于后一段x基础上归并排原创 2011-10-18 14:01:28 · 3867 阅读 · 0 评论 -
【除草】一些稍难题
hdu4623通过打表发现很多数字在考虑互质的情况是dengjia原创 2014-07-13 14:16:11 · 856 阅读 · 0 评论 -
【除草】一些题目
hdu4304一段n*n的墙,用一个刷子来刷,要求刷子的第一根毛在第一个原创 2014-07-08 15:23:22 · 1289 阅读 · 0 评论 -
【除草】Hackerrank思考题
matrix tree矩阵aij,表示i和j的lca的点权值原创 2014-10-30 23:54:07 · 969 阅读 · 0 评论 -
【快速数论变换NTT】AVL tree
询问有n个节点,h高度的AVL有多少种。可以定义f[i][j]为gao w原创 2014-11-03 20:07:34 · 1569 阅读 · 2 评论 -
【codechef除草】
Lighting the shop给定一个 N*M 的方格,其中有些格子被标记。你要将被标记的格子染色,使得颜色数最少,并且保证同行同列没有相同颜色的格子。首先这个矩阵填色可以化归为二分图的边染色,将每行每列看作一个节点,分为两部,所谓限制无非是同一个点连出去的边不能同色, 这就是一个最小边染色的问题, 如同其他很多图上的 np 问题,这在二分图上是有多项式算法的。我们来看最少要用原创 2013-01-28 18:20:55 · 903 阅读 · 0 评论 -
【清澄竞技4.7】painting
好久没更新了,还是要总结一下第一次参加集训队考试,拿了非集训队的第一,happy ing主要是靠ac此题拿的分题目大意:给出一颗n个节点的树,要给每一条边染一个1~n-1的颜色,染颜色i的代价为i,要求同一个节点连出的所有边所染颜色都互不相同,求一个为整棵树染色的方案,使得代价之和尽量小。贪心明显是有后效性的,考虑设计f[i][j]表示i这棵子树,i到根选择j这种颜色,此子树的原创 2012-04-07 22:06:20 · 1087 阅读 · 3 评论 -
【zuma】周而进 字符串游戏
这道题与CCC的zuma异曲同工,只是求不同的东西,一开始我想直接用o(L^3*S*P)结果发现有20亿,好像过不了,没想到常数这么小,竟然就是标解了#include #include #include #include using namespace std;int ans[200],f[200][200],g[200][50][50],len,n,b[200];char ch[原创 2013-01-04 10:29:33 · 893 阅读 · 0 评论 -
可并堆 poj3016 不平衡的美
左偏树原创 2011-07-25 10:01:40 · 1509 阅读 · 0 评论 -
用单调性优化动态规划 poj3017
题意:将长度为n的序列分成若干段,使每段之和不大于m,且使各段中最大值之和最小,输出该值。显然的方程f[i]:=min(f[j]+max(j+1,i));f[i]表示前i个中划分出的最小值,max(l,r)只l,r中的最大值,转移条件为sum[j+1,i]这个方程时间复杂原创 2011-08-14 15:12:04 · 1495 阅读 · 3 评论 -
动规里的偏序
动规转移是往往要满足一系列条件,其中可能只要满足单调的偏序关系,因此,在动归理论复杂度超时时,我们可以将这些偏序关系写出来,或用数据结构,或用维护斜率等一系列方法来维护这些偏序关系,降低复杂度。例题:给你一个长度为N的正整数序列A1,A2…AN,你需要踢掉一些数(踢完了以原创 2011-07-23 16:40:45 · 849 阅读 · 0 评论 -
一些背包问题
备战noip ing背包问题其实算np问题,一般的动规算是伪多项式。按时间顺序来吧、、、、1、lmd的搜索匹配在n个数中选若干个数,使其和等于某个数。(n据他自己说,数据范围和有特点、、、、正解的数据范围是暴力的两倍、、、、结果几乎没人看出来。容易看出原创 2011-10-18 14:40:55 · 1263 阅读 · 0 评论 -
一些动规题
ps:代码有点丑。二维偏序的最长上升子序列看到标题是不是觉得很水呢。。。但是如果其中一维是dfs序,即在树上呢。。。而且,还得缩环成树。。。先缩环,一维dfs,二维线段树or单调栈。{$M 100000000}uses math;var t,b,rt,w,tail,tail1,v,q,p,st,f:array[1..300000]of longint; d:ar原创 2011-10-27 16:17:01 · 937 阅读 · 0 评论 -
【矩阵优化连通性状压dp】哈密尔顿路径
以前觉得插头dp好晕啊,结果稍微推了一下转移发现并不难推,只是转移多了点罢了,可是noip模拟的时候270行的恶心转移dp都打过,100+的状压也就还好了。本题有一维特别大,于是我们压缩小的那一维,然后裸转一行后,用矩阵加速即可。转移第一次写会觉得麻烦,最后自己推一边在跟别人推的对一下检查有没有漏转或多转,至于要一模一样则没必要,我完全是按自己的喜好来的。ural有道题是有障碍的哈密尔原创 2012-03-10 14:54:21 · 932 阅读 · 0 评论 -
【数位统计】Tickets
有一位售票员给乘客售票。对于每位乘客,他会卖出多张连续的票,直到已卖出的票的编号的数位之和不小于给定的正数K。然后他会按照相同的规则给下一位乘客售票。初始时,售票员持有的票的编号是从L到R的连续整数。请你求出,售票员可以售票给多少位乘客。数据规模:1 ≤ L ≤ R≤ 1018,1 ≤ K ≤1000。刘聪论问题,以前做此类题都是按位考虑,可是偏偏此题用树考虑极为方便(居然不满足区原创 2012-03-10 15:17:12 · 639 阅读 · 0 评论 -
【dp】codeforces 83E
简单dp定义了一个函数f。f(‘’)=’’,设s为一个字符串数组,则f(s[1],s[2])=s’(为一个字符串),s’必须满足s[1]是他的前缀,而s[2]是他的后缀,并且s’的长度必须最短。F(s[1],s[2],s[3],s[4]…,s[n])=f(f(s[1],s[2],s[3],s[4]…,s[n-1]),s[n])现在有一个长度为n的字符串序列s,s序列的大小不超过20原创 2012-09-18 19:36:54 · 865 阅读 · 0 评论 -
【CCC】dinner
貌似zuma挺流行,coci有一道,poj有两道,CCC有一道,poj有一道还曾是神题属性...这道题目要求比较少,完全不会发生链式反应考虑到正着操作不好分成或表示子状态,因此我们反着考虑操作,变成选择若干同色段,使其个数不小于K,为了完成这一操作只需消去不是我们所选择的区间即可,因此使用区间dp,f[i][j]表示区间[i,j]消掉的代价,为了完成上述转移,利用g[L][k]进行线性dp原创 2012-12-26 15:56:45 · 597 阅读 · 0 评论 -
【ural】
1400:略#include #include #include #include #include #include const int dx[4]={-1,0,1,0};const int dy[4]={0,1,0,-1};const double oo=1e300;using namespace std;struct point{int x,y;};queue原创 2012-12-18 14:30:02 · 986 阅读 · 0 评论