最优化与计数

news/2024/9/20 7:18:10/文章来源:https://www.cnblogs.com/wangwenhan/p/18383609

动态规划:可以认为由状态,转移两个过程构成

树上优化技巧

P1272 重建道路

设,dp[i][j]为包含i的大小为j的连通块的最小操作次数,枚举i的每个子树一个个合并上去。

考虑两个点i,j只会在lca处有计算时间贡献,所以是\(O(n^2)\)

LOJ160. 树形背包

先跑dfs序,设dp[i][w]为从第i个位置开始的后缀,容量为w的最大价值。

设第i个位置为x,则\(dp[i+1][w-w[x]]\)可以转移过来。

或者直接跳过\(x\)所在的子树,从\(dp[low[x]+1][w]\)转移过来。

多项式优化(拉插)

首先可以高斯消元,\(O(n^3)\)
然后考虑其实可以构造,详见拉格朗日插值法

自然数幂和

拉插经典应用

\(F(k)=\sum_{i=1}^{n}i^k\),求\(F(k)\)

\(k<=2000,n<=10^9\)

\(f(x)=x^k\)

考虑计算\(f(x)-f(x-1)=x^k-(x-1)^{k}\)

\((x-1)^k\)二项式展开,发现\(f(x)-f(x-1)\)\(k\)次项正好没了,所以\(f(x)-f(x-1)\)\(k-1\)次的。

\(f(x)-f(x-1)\)求和,我们知道对一个\(y\)次的多项式\(g(x)\)\(\sum_{i}g(i)\)\(y+1\)次的。

所以\(\sum_{i=1}^{x}(f(x)-f(x-1))\)\(k\)次的,即\(f(x)\)\(k\)次的。

再做一次,所以\(F(x)=\sum_{i=1}^{x}f(x)\)\(k+1\)次的。

然后拉插。

CF1967C Fenwick Tree

考虑枚举区间结尾x,取出长度为\(lowbit(x)\)的一段,区间内每个点到终点的贡献系数的多项式(自变量为k)是\(log(n)\)级的,因为贡献路径长度为\(log(n)\)量级。

所以最后每个位置必定是一个对k的O(log) 阶多项式,所以直接暴力跑前 log 次,然后对每个位置都插一遍就做完了。

P8290 [省选联考 2022] 填树

极差小于等于\(K\)不好做,考虑枚举最小值权值\(x\),那么所有路径上的点的权值都要在\([x,x+k]\)内,现在每个路径上的点\(i\)的权值范围是\([max(x,l_i),min(x+k,r_i)]\)

先思考如何暴力,我们显然只关心每个点权值范围的大小,也就是\(max(0,min(x+k,r_i)-max(x,l_i)+1)\)

于是可以直接枚举路径,把路径上所有范围大小乘起来即可。

但是发现有一个问题,这样做不能保证最小权值为\(x\),可以计算所有路径上的点权值在\([x+1,x+k]\)内的答案,简单容斥掉。

考虑优化,计算范围的时候有\(min\)\(max\),这样十分的不好计算,对每个点分类讨论一下。

image
image

P10013 [集训队互测 2023] Tree Topological Order Counting

首先考虑计算一个子树的合法拓扑序数量。

假设一个点x有两个儿子a和b,dp[i]为i子树内拓扑序的数量。

不难发现有\(dp[x]=dp[a]\times dp[b] \times C(sz(a)+sz(b),sz(a))\),可以理解为siz(x)个位置内随便选取siz(a)个位置把一个a的拓扑序顺序放进去,剩下的位置把一个b的拓扑序顺序放进去。

如果x有很多个儿子也是一样的,手推一下不难得出,比如有一个儿子c,就乘上\(dp[c] \times C(sz(a)+sz(b)+sz(c),sz(a)+sz(b))\)$。

把组合数拆一下,最终的方案数就是sz总和的阶乘除以每个sz各自的阶乘。

sz总和显然是\(sz(x)-1\),即分子为\((sz(x)-1)!\),发现x在计算其父亲的答案的时候会贡献一个\(\frac{1}{sz(x)!}\)

所以以x为根的拓扑序数量为\(\frac{sz(x)!}{\prod_{y}sz(y)!}\),其中y是x的儿子。

设f[x][i]表示x的子树内的拓扑序,表示s在x子树的拓扑序的第i位的方案数,其中s是题目中枚举的u,然后把s到根的一条链上的点跑树形dp。

不难得出,f[s][1]=dp[s]。

考虑怎么把一个点y的信息转移到父亲x,我们可以先计算除了y的x的所有的儿子的拓扑序方案数,,根据前面的结论,只需要预处理x个每个节点z的\(\frac{1}{sz(y)}\)然后把y的siz(y)的拓扑序和这个长度为\(sz(x)-sz(y)-1\)的拓扑序合并。

如果现在s在y的拓扑序中的位置为i,枚举长度为\(sz(x)-sz(y)-1\)的拓扑序中有j个在s之前,方案数为\(C(i+j-1,i-1)\times C((siz(x)-1)-i-j,sz(y)-i)\)

别忘了x一定要放在其子树拓扑序的第一位,所以\(f[i][j]\)一定要变成\(f[i][j+1]\)

根据一开始重建道路这道题的分析,单次是\(O(n^2)\)的,总时间复杂度为\(O(n^3)\)

对于点s,答案为\(\sum{i=1}^(n)f[1][i]\times b[i]\)

考虑将整个过程从上往下推,假设已知\(f[x][i]\),怎么向下计算。

可以把\(f[i][j]\)的值该为s在\(x\)子树内的第i个位置,向上的贡献是多少

最小斯坦纳树

模板:P6192 【模板】最小斯坦纳树

首先分析为什么形成一棵树是最优的,显然如果出现环删掉任意一条边都会更优,所以选出来的是一棵树。

从小往大枚举一个关键点集S

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/789298.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻松搞定工厂数据分析:一款报表工具就够了

在当今快速发展的工业环境中,工厂管理者越来越依赖数据分析来优化生产流程、提升效率、降低成本。然而,传统的数据分析工具通常较为复杂,操作困难且价格高昂,这让许多工厂望而却步。不过,最近我发现了一款非常实用的报表工具,能够帮助工厂管理者轻松完成综合数据分析,并…

Redis组件介绍(二)

今天我们继续学习 Redis。写在前面 今天我们继续学习 Redis。 Redis 常用数据类型 在 Redis 中,每个存储的键值对中,键是 String 类型,值可以是不同的数据类型。Redis 的索引是含头含尾的。 String 内存模型常用指令设置值SET key value: 设置一个 key/value。 MSET key1 va…

财务报表分析指南:如何掌握核心指标?

一、概述 财务报表中有大量信息,如果我们在分析时缺乏明确的方向或忽视了重点,就很容易在繁杂的数据中迷失方向。本文将深入探讨财务报表中的几个重要指标,帮助大家更有针对性地理解这些内容,包括如何分析资产负债率、解读净资产收益率,以及计算销售复合增长率。二、关键指…

阿里巴巴对于不同职级的定义和要求

作为国内最知名的互联网大厂,阿里巴巴集团的职级体系经常成为其他互联网企业的用人参考标准,今天从我个人的角度带大家了解一下阿里的职级体系1、P1-P3 是低端职能以及外包的岗位,P4、P5 是专员,一般硕士学历校招进入阿里巴巴职级都是P5,学历极其突出的或者搞技术科研的除…

WPF-Prism Region使用

Region:区域,我的理解,就是窗体上的一部分地方,不是整个窗体。所以区域里都是用户控件UserControl,就是为了解决在窗体上显示一个自定义的公用的控件的。共两种用法:1、原始的方法(不借助prism的依赖注入),用IRegionManager接口,来完成区域的注册和设置。注册代码如下…

需求分析的 5 个步骤,可解决 80% 产品问题

本文将详细介绍拆解需求的五个步骤及一个实际案例分析,帮助读者掌握如何从不同角度切入,精确捕捉并满足用户需求。 一、拆解需求的5个步骤&通用分析角度 1. 谁在用 最基础也是最重要的一步——用户分层。因为同一个功能,不同的用户群体的需求是有差异的。 比如,首次话…

深度学习-pytorch-nerual network价格预测-004

# 1.导入相关模块 import torch from torch.utils.data import TensorDataset from torch.utils.data import DataLoader import torch.nn as nn import torch.optim as optim from sklearn.datasets import make_regression from sklearn.model_selection import train_test_s…

财务知识-会计术语

财务知识-会计术语

selenium爬虫2

无头浏览器简介 无头浏览器(Headless Browser)是一种没有图形用户界面的浏览器,它在后台运行,不会显示任何窗口或界面。无头浏览器通常用于自动化任务,如网页抓取、自动化测试和性能监控等。 爬取票房比如我要爬取上图的2008--2024年的热门电影票房排名 from selenium imp…

Zotero设置

实现Zotero数据在不同电脑间的迁移1. 说明Zotero 中文社区 | 百度网盘使用 zotero 仅同步题录信息,使用其他云同步程序同步文献的附件,此处以坚果云为例进行演示。 准备:zotero 和 坚果云 注册账号 zotero 的插件 zotfile (国内汉化版) 坚果云客户端常用插件:zotfile jasmi…

CentOS 7.9 内核从 3.10 升级到 5.4

1.背景介绍: 环境需求:在搭建 Kubernetes (K8S) 环境时,内核版本最好大于 4.4 以支持 K8S 的所有特性。 当前内核版本:CentOS 7.9 的默认内核版本为 3.10.0-1160.el7.x86_64,不满足 K8S 的推荐内核版本要求。 2.查看内核版本及相关包: 使用命令 uname -r 查看当前内核版本…