• \(n\)个点,要求连一棵树,设点\(i\)的度数为\(d_i\),则其贡献为\(f(d_i)\mod 59393\),其中\(f(x)\)是一个\(k\)次多项式。最大化总贡献。\(n\leq 3000, k\leq 10, a_i\leq 50\)。

对于任意一种度数序列,都可以生成一棵对应的树。

每个点度数\(\geq 1\),\(-1\)后等于\(n\)个点分\(n-2\)个度数。

\(O(n^3)\)dp:\(f_{i,j}\)表示前\(i\)个点,度数和为\(j\)的最优解,转移的时候枚举新点度数。

实际上不需要限制非\(0\)数的个数,直接枚举度数做完全背包,\(O(n^2)\)。

dp时很多状态是非必要的,通过一些转化,去掉它们就可以优化很多。

(顺便一提,模数是ntt模数,然而这题和ntt没什么关系)


\(f_{i,j}\)表示第\(i\)个单位,血量为\(j\)的概率。

询问的时候对每个单位算出\(g_{i,j}\),表示除了第\(i\)个单位之外,有\(j\)个单位存活的概率。先把所有单位的背包算出来,每个单位的\(g_i\)相当于退一个背包,用除一个\(ax+b\)的方法,可以做到单次\(O(n^2)\)。

复杂度\(O(nm+n^2C)\)。


  • 一个\(n\)个点的图,求\(k\)个叶子的生成树个数。\(n\leq 15\)。

一种dp:设\(f_{\{a_1.…,a_n\}},a_i=\{0,1,2\}\),表示每个点没选/选了,是/不是叶子的方案数。

然后这个dp被ytq枪毙了。

考虑容斥,枚举叶子集合,剩下的点Matrix-Tree求出生成树个数,然后把叶子挂在生成树下面。用fmt/fwt优化容斥,复杂度\(O(3^n)\)。


  • 有\(\{2…n\}\),共\(n-1\)个数。两个人各取一个子集\(S,T\),要求不存在\(x\in S,y\in T\),使得\(\gcd(x,y)\not=1\),求方案数。\(n\leq 500\)。

\(x^2\leq 500\)的质数最多\(8\)个。

意味着对于一个数,不属于这些质数的质因子最多一个。

枚举\(8\)个质因数中每个属于\(S,T\),还是都不属于。dp大质数各自属于哪个集合即可。复杂度\(O(3^8\cdot n)\)。


  • \(n\times m\)的网格,每个位置有权值。选若干个位置,满足任意两个位置八方向不连通,求最大权值。\(n\leq 12,m \leq 100\)。

插头dp经典问题。


  • \(n\)个点的有根森林,两个人轮流选点,删去这个点的祖先和它本身,保留其余点的父子关系(即,可能生成若干棵树)。不能操作者输,求先手是否必胜。\(n\leq 10^5\)。

设\(f_i\)表示以\(i\)为根的子树的sg函数,对每个点暴力dfs,\(O(n^2)\)暴力很好做。

发现一个儿子转移到父亲,它的子问题的sg函数,需要整体xor上一个值,用trie维护,直接线段树合并就可以了(\(01\)trie的本质就是一个二进制分组的权值线段树)。


  • 平面上有\(2n\)个球,有\(2n\)个机器人,分别位于横、纵轴\([1,n]\)的位置。激活一个机器人会拿走它坐标轴垂直方向最近的球。问多少顺序可以拿走所有球。\(n\leq 10^5\)。

建\(2n\)个点分别表示第\(i\)行和第\(i\)列。对于\((x,y)\)的球,从\(x\)行向\(y\)列连边,边权为\(x+y\)。每次激活一个点,等于选了与它相连的剩余权值最小的边。

考虑合法的方案,要求每个连通块边数等于点数,且每个点出度为\(1\)。发现是一个基环内向树。

环上枚举顺时针或逆时针,树上可以直接树dp。


  • 数轴上有\(n\)个点,第\(i\)个的位置是\(x_i\)。你的起点是\(0\),终点是\(E\),速度是\(1\)单位每秒。对于每个点,设第一次走上去的时间为\(t_i\),则会在\(t_i+T\)时刻产生一个硬币。求收集所有硬币并走到终点的最小时间。\(n\leq 10^5,0 < x_i < E\)。

设\(f_{i}\)表示最后一次在\(x_i\)处回头的最小时间,列出暴力方程:

\[f_i=\max_{j<i}\{f_j+x_i-x_j+\max(2(x_i-x_j),T)\}\]

取\(\max\)表示路程太短没法生成硬币,需要等一会。

拆成两部分dp,对于\(\max=T\)的一部分,可以单调队列优化。否则就是一个前缀最小值。可以线性完成。好水啊


  • 给一个序列\(a_i\),对每个\(i\)找一个最小的\(p_i\),满足对所有\(j\)有\(p_i\geq a_j-a_i+\sqrt{|i-j|}\)。\(n\leq 10^6\)。

有个比较显然的\(O(n\sqrt n)\)做法,即枚举平方根,对每个平方根用单调队列优化。

四边形不等式:若\(w_{i,j}\)满足内内+外外\(\geq\)内外+外内,则称\(w_{i,j}\)满足四边形不等式,利用\(w_{i,j}\)转移的方程满足决策单调性。

利用决策单调性优化方程需要快速算出\(w_{i,j}\),或\(w_{i,j}\)满足莫队性质。

一般情况下是分治计算,即,暴力算出\(mid\)处的最优位置,然后递归两边。


暴力做法:枚举中位数\(\mu\),每条边拆成\(a_i,2\mu-a_i\)两条边,分别为黑和白。就转化为了\(k\)白边最小生成树,wqs二分即可。复杂度\(O(nm\log a\cdot \alpha(n))\)。

结论:最大生成树只包含\(w\geq \mu\)的黑边和\(w<\mu\)的白边。

发现枚举\(\mu\)的操作只对白边有影响,可以和wqs二分放到一起,复杂度\(O(m\log a\cdot \alpha(n))\)。


  • 有一个二进制串,初始全是\(0\)。现在有\(m\)次操作,每次操作有\(p_i\)的概率给这个串加上\(2^{a_i}\),一次操作的代价是这次操作导致二进制串变化的位数,求所有操作的期望代价和。\(a_i,m\leq 2\times 10^5\)。

答案等于所有过程进位次数加上最后保留的\(1\)的个数,所以操作顺序对答案没有影响。

\(f_{i,j}\)表示前\(i\)位,这一位被加了\(j\)次的期望,则\(f_{i,j}\)可以转移到\(f_{i+1,\lfloor\frac{j}{2}\rfloor}\)。

操作等于乘以一个\(p_ix+(1-p_i)\)的多项式,可以分治fft。

假设某个位置操作了\(y\)次,则它最多进位\(\log_2y\)次,相当于每个多项式最多前进\(\log\)步。只需要处理有用的部分即可。复杂度\(O(n\log^2n)\)。

ZROI 19.08.03 DP入门的更多相关文章

  1. ZROI 19.08.03 分治与离线

    经典问题,给一张图,支持加边/删边/询问两点连通性. 离线统计边权(删除时间),lct维护最大生成树即可. 也可以按时间分治,维护一个可回退并查集即可. 主定理 很好用,但是记不住. 有一种简明的替代 ...

  2. ZROI 19.08.12模拟赛

    传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "我发现问题的根源是大家都不会前缀和."--敦爷 A 敦爷spj写错了,差点把蒟蒻swk送走 \(50pts:\) ...

  3. ZROI 19.08.11模拟赛

    传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. dlstql,wsl A \(10pts:\) \(a=100,T=100\),对每个排列构造一个反的,一步到位即可. \(20pts ...

  4. ZROI 19.08.10模拟赛

    传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(20pts:\) 枚举操作序列然后暴力跑,复杂度\(O(6^n)\). \([50,80]pts:\) 枚举改成dfs,每层操 ...

  5. ZROI 19.08.05模拟赛

    传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(21pts:\) 随便枚举,随便爆搜就好了. \(65pts:\) 比较显然的dp,设\(f_{i,j,k}\)表示在子树\( ...

  6. ZROI 19.08.02 杂题选讲

    给出\(n\)个数,用最少的\(2^k\)或\(-2^{k}\),使得能拼出所有数,输出方案.\(n,|a_i|\leq 10^5\). 显然一个绝对值最多选一次.这个性质非常强. 如果所有都是偶数, ...

  7. ZROI 19.08.01 树上数据结构

    1.总览 LCT 链分治(树剖) 点/边分治 2.点分治 一棵树,点有\(0/1\),多次修改,询问最远的两个\(1\)距离. 建出点分树,每个子树用堆维护:①最远的\(1\)距离:②它的每个儿子的① ...

  8. ZROI 19.08.01 生成函数方法

    写在前面:由于我数学基础不好,加上缺乏生成函数知识,所以这一下午我都处在掉线和非掉线的叠加态.而且我写\(\LaTeX\)很慢,所以笔记相当混乱而且不全面.说白了就是我太菜了听不懂. 1.一般生成函数 ...

  9. ZROI 19.08.09模拟赛

    传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(70pts:\) 维护一个栈,从一侧向另一侧扫描,如果新加入的元素与当前栈顶相同,则出栈,否则进栈.显然一个子串是括号序列,当 ...

随机推荐

  1. 【DVWA】Command Injection(命令注入)通关教程

    日期:2019-08-01 16:05:34 更新: 作者:Bay0net 介绍:利用命令注入,来复习了一下绕过过滤的方法,还可以写一个字典来 fuzz 命令注入的点. 0x01. 漏洞介绍 仅仅需要 ...

  2. ffmpeg Tesseract-OCR 识别文字滤镜 中文识别输出文本

    ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=in.tif,ocr=datapath=tessdata ...

  3. python操作oracl数据库

    #查询交易系统数据,判断当日是否有港股交易 import cx_Oracleimport os conn = Nonecursor = None hkfile = 'hk.txt'nohkfile = ...

  4. select去掉默认样式

    今天遇到的问题,并在这里做一下记录和总结 去除select下拉框默认样式 select { /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ border: solid 1px ...

  5. CTF—攻防练习之ssh私钥泄露

    攻防练习1 ssh私钥泄露 靶场镜像:链接: https://pan.baidu.com/s/1xfKILyIzELi_ZgUw4aXT7w 提取码: 59g0 首先安装打开靶场机 没办法登录,也没法 ...

  6. Mybatis 之 SQL生成技巧

    一.增 1.<trim> 和<if>实现数据插入 <insert id="addInOrder" parameterType="XXX.mo ...

  7. ELK+Kafka日志收集环境搭建

    1.搭建Elasticsearch环境并测试: (1)删除es的容器 (2)删除es的镜像 (3)宿主机调内存: 执行命令:sudo sysctl -w vm.max_map_count=655360 ...

  8. 磁盘的分区和挂载(mount)

    一.挂载问题的引入 我们大多数人用惯了windos系统,对linux系统中磁盘的管理就先入为主,不太好理解挂载这一动作.在linux系统中添加一块新磁盘后,要进行分区.格式化(分配文件系统).挂载.当 ...

  9. Vue --》this.$set()的神奇用法

    作为一名开发者,我们都知道: data中数据,都是响应式.也就是说,如果操作data中的数据,视图会实时更新: 但在实际开发中,遇到过一个坑:若data中数据类型为对象,方法methods中改变对象的 ...

  10. 【Linux 网络编程】TCP/IP四层模型

    应用层.传输层.网络层.链路层 链路层:常用协议 ARP(将物理地址转化为IP地址) RARP(将IP地址转换为物理地址) 网络层(IP层):重要协议ICMP IP IGMP 传输层:重要的协议TCP ...