随笔分类 -  DP

摘要:靖爷的仙仙题,其实并不难,可是想了挺久,码了挺久,调了挺久,本人菜鸡了挺久,还是不够专注 就是问n的排列中,最长上升子序列长度为k的方案数,同时有一些约束 不难想到把求lis的单调栈压下来,但是还要压一个这个数字用了没有,状态数就是2^2n的了。感觉这个做法不对然后就想歪了 其实可以把这个东西压成三 阅读全文
posted @ 2019-05-12 17:08 AKCqhzdy 阅读(318) 评论(0) 推荐(0) 编辑
摘要:还是loj的机子快啊。。。 普通的DP不难想到,设F[i][zt]为带上根玩出zt的方案数,G[i][zt]为子树中的方案数,后面是可以用FWT优化的 主要是复习了下动态DP 阅读全文
posted @ 2019-04-21 15:43 AKCqhzdy 阅读(288) 评论(0) 推荐(0) 编辑
摘要:是bzoj4498: 魔法的碰撞的哥哥题,我只写了一种 不一样的地方在于贡献有负数,第三维要保存的不能仅仅是0~L,这样空间会炸裂 考虑如何把贡献变成正的 假如要求最优解,那么一定是按顺序排,混乱度为hmax-hmin 反过来想,这启示我们hi-hj,可以用(hi - hi-1)+(hi-1 - h 阅读全文
posted @ 2019-02-26 20:18 AKCqhzdy 阅读(228) 评论(0) 推荐(0) 编辑
摘要:好题实吹 这种排列计数问题确实感觉无从下手啊 考虑暴力,是枚举每一个排列,排列的贡献为C(L-W,n),其中W是max(di-1,di)-1,即相邻两个魔法师之间不能放的位置 考虑到攻击范围比较小,一个人最多打80个位置,假如能够计算出对于每个W的排列方案数,就能算出答案了 排序消掉max,按大到小 阅读全文
posted @ 2019-02-26 15:44 AKCqhzdy 阅读(272) 评论(0) 推荐(0) 编辑
摘要:暴力三维DP容易想到 也容易想到贪心每一位,尽量不选 但是怎么check呢?又是拼起来 f[i][j]表示枚举到第i位,分成j组,且可以满足当前假设是否有可行解 转移不难自己看代码吧 但是这样是O(logm*n^3)的,subtest5过不去 但是它又有一个A==1,就可以维护枚举到第i位分成组数最 阅读全文
posted @ 2019-02-23 09:58 AKCqhzdy 阅读(216) 评论(0) 推荐(0) 编辑
摘要:为什么这么傻逼的题我还是写了这么久呢 设f[i][j]表示取到第i个硬币,上界是j的先手最大收益 然后就是枚举取多少来转移,但是这样是O(n)的,总复杂度就是n^3的了 考虑对于f[i][j-1]和f[i][j],f[i][j-1]选的范围是1~j-1,而f[i][j]是1~j,仅仅是多了一个转移的 阅读全文
posted @ 2019-02-22 08:55 AKCqhzdy 阅读(100) 评论(0) 推荐(0) 编辑
摘要:这个题为什么会放在数据结构啊 首先因为有决策包容性,对于一个n每次必然选择一个n%p最大的p,令n减n%p 设fi表示i变成0的步数的话,同样我们可以知道f是有单调性的 假如fd能转移到fk,首先d一定是某个p的倍数,并且k-d+1<pi才能够转移 对于一个合法的d,它能够影响的长度就是pp,其中p 阅读全文
posted @ 2019-01-24 11:37 AKCqhzdy 阅读(279) 评论(0) 推荐(0) 编辑
摘要:明显的,行列的顺序是没有关系的 我们可以考虑用几个块+组合顺序把答案拼出来 十种颜色难以状压,但是我们可以对于每种颜色,把它覆盖i行j列的方案数给算出来 LL g[maxC][maxl][maxl];//用cn[i]个棋子占i行j列并且一定占满 > 的方案数 LL f[maxC][maxl][max 阅读全文
posted @ 2019-01-18 11:01 AKCqhzdy 阅读(148) 评论(0) 推荐(0) 编辑
摘要:我震惊了,我好菜,我是不是该退役(苦逼) 可以先看看代码里的注释 首先我们先考虑一下第一问好了真做起来也就这个能想想了 那么离散化时间是肯定的,看一手范围猜出是二维DP,那对于两个会场,一个放自变量,一个放变量,然后O(n^3)的DP好了 第二问像第一问的做法特判一波就是O(n^4)啦 对于一个嘉年 阅读全文
posted @ 2019-01-17 21:58 AKCqhzdy 阅读(161) 评论(0) 推荐(0) 编辑
摘要:这题真神。。。 首先看到这么花里胡哨的题面眉头一皱就发现这个球的大小是搞笑的不然就没法做了,有用的是最终拆出来的长度 然后对于一段长度为n有n-1个丝状物的东西,写一个DP:f[i][2]表示枚举到第i个丝状物,当前断不断 那f[i][0]=f[i-1][1] f[i][1]=f[i-1][0]+f 阅读全文
posted @ 2019-01-17 10:02 AKCqhzdy 阅读(222) 评论(0) 推荐(0) 编辑
摘要:脑子是个好东西,可惜我没有 容易发现只要满足这个东西就可以了:设p[i]为a[x]=i的个数的后缀和,那么对于每个位置要满足p[i]<=n-i+1,也就说,具体那个人根本就不关心 转换完问题我就傻掉了 设f[i][j]表示枚举到第i个位置,后i个位置共有j个编号的方案数 那么整个代码其实有用的就只有 阅读全文
posted @ 2019-01-16 09:09 AKCqhzdy 阅读(128) 评论(0) 推荐(0) 编辑
摘要:虽然感觉神仙但是又感觉不神仙。。。 对于删除,一定是删掉连续的一段的 如果可以预处理出某一段能不能被删掉,我就很开心了 设f[i][j][k][u]表示给出的字符串中,i到j和S集合第k个元素第u个字符是否匹配 转移懒得写了反正抄的 阅读全文
posted @ 2019-01-15 20:57 AKCqhzdy 阅读(140) 评论(0) 推荐(0) 编辑
摘要:考虑到一个性质,A到B的距离一定不小于A到C再到B的距离,因为能够到达这三个点不可能构成锐角三角形 对于当前点的更新只需要找那些无法经过其它点再到当前点的点,相当于是一个y坐标单调减的上凸包,随便维护下 卡常让我迷失了心智 阅读全文
posted @ 2019-01-15 15:37 AKCqhzdy 阅读(151) 评论(0) 推荐(0) 编辑
摘要:再做水题就没救了 考虑DP。。。我们把正反面一起弄 fi,j,k,u表示第几个位置,正面多了多少左括号,背面多了多少没办法消的右括号,背面结尾的左括号数 阅读全文
posted @ 2019-01-08 08:53 AKCqhzdy 阅读(189) 评论(0) 推荐(0) 编辑
摘要:这题意。。。注意不同的方案中不能有相同的斐波那契数中的相同指的是完全相同,就是一个不一样就行了 思维题 fib增长得很快,92就爆LL了 我们考虑用一个01串表示第几个斐波那契数是否选 对于一个合法的方案,可以通过令一个位的1变成0,再令下两位的0变成1的方式变成另一个方案 我们可以求出二进制最大的 阅读全文
posted @ 2019-01-07 20:19 AKCqhzdy 阅读(169) 评论(0) 推荐(0) 编辑
摘要:首先不可重的整数规划是fi,j=fi-1,j-i+fi,j-i的 然后现在加了一个限制,分成的数不能超过n,那么对于拼大于n的数的时候多减一个fi-1,j-n-1 接下来是优化代码暴露我自带巨大常数的时候了 拿着两份代码看来看去蒙蔽了,为啥我要跑10s人家2s就完事了。。。 //memset(f,0 阅读全文
posted @ 2019-01-07 08:18 AKCqhzdy 阅读(138) 评论(0) 推荐(0) 编辑
摘要:各种套路糅杂 首先观察len很大,又容易想到DP 那么就是矩乘优化DP啊 然而给的字符串长度很小 那就更确定了,在AC机上跑 方程没什么意思大家都会,然而我一开始蒙蔽了,这个怎么没有模数。。。 所以DP的时候要直接算出期望。。。 阅读全文
posted @ 2019-01-06 22:01 AKCqhzdy 阅读(143) 评论(0) 推荐(0) 编辑
摘要:真的是无尽接近单刷这题啊。。。。或许这就是差距吧,把大概的思路方向想出来具体就不会了 心态爆炸 首先可以一眼的是这个权值肯定要离散化,然后把每个选择的区间断成一段段 假如枚举到当前学校当前区间,前一个学校比这个区间小的傻子都会转移,主要是处理同区间的转移 我们可以先列一个方程的雏形:f[i][j]表 阅读全文
posted @ 2019-01-03 21:05 AKCqhzdy 阅读(184) 评论(0) 推荐(0) 编辑
摘要:爆了一天。。。我还是太菜 ORZ 阅读全文
posted @ 2018-12-30 17:06 AKCqhzdy 阅读(171) 评论(0) 推荐(0) 编辑
摘要:明显是要上DP的。虽然我只能想出5个for起步。。。然后云里雾里瞎搞搞不知道乱搞成什么样 反正枚举到那个玉米那一维可以省掉,然后就一个操作数一个高度,看看范围可以用二维树状数组优化下 就是令f[i][j]表示到了当前操作了i次最高位为j最多保留的玉米,这个可以直接扔到树状数组里面 弄一个辅助数组更新 阅读全文
posted @ 2018-12-24 19:23 AKCqhzdy 阅读(155) 评论(0) 推荐(0) 编辑