首页 > 其他分享 >数学做题笔记

数学做题笔记

时间:2023-03-27 14:45:00浏览次数:46  
标签:方案 排列 数为 元素 笔记 数学 编号 节点

ABC267G Increasing K Times

[ABC267G] Increasing K Times

一道计数题.

主要是是一个比较经典的trick才来做的这题.

就是形如已知一个序列,求有多少个排列满足一个条件,这个条件一般是制约相邻两个元素的

那么可以采用一个技巧就是序列排序,然后按照某种顺序插入

考虑有多少排列问题,那么可以先对\(a\) 排序然后依次插入。

每次插入一个最大值,那么只需要求有多少个位置满足插入后满足条件的位置 \(+1\),然后直接跑一遍简单的背包即可。


ARC148E ≥ K

ARC148E ≥ K

一道计数题。

对于这种对相邻两个元素都有影响的问题,可以考虑将元素按一定顺序一个个加入序列,考虑其对整个方案数的贡献。

1.先将元素从小到大排序。

2.考虑两个维护左右区间的指针 \(l,r\),令 \(a_r\) 为 \(a_l+a_r\geq k\) 的最小编号,其中 \([1,l-1]\) 以及 \([r+1,n]\) 这两段中的元素都已经加入序列。

这样就可以知道一共加入了 \(n-r+l-1\) 个元素,有 \(n-r+l\) 个空位可供下一个元素放置。

  • 放入 \(a_r\)

    此时一共有 \(l-1\) 个元素无法满足将 \(a_r\) 放入其左边或者右边时无法满足 $ \geq k$的要求(之所以是 \(l-1\) 是因为既然 \(r\)并没有在 \(l\) 之前的元素遍历到时就放入,那么自然前面的元素也是不满足条件的);

    那么此时就有 \((n-r+l)-2 \times (l-1)\) 个空位可选。

  • 放入 \(a_l\)

    \([1,l-1]\) 中的元素和 \(a_l\) 也不能满足条件;

    不会有 \(a_l+a_{l-1} \geq k\) ,因为如果这样的话 \(a_l\)就会在遍历到 \(l\) 还是 \(l-1\) 是就被当作 \(a_r\) 放入;

    同理,有 \((n-r+l)-2\times(l-1)\) 个空位可选。

  • 注意,因为有相同元素,因此要在最后除以相同元素的排列数以消除影响。


LG T316869 Before I Rise

T316869 Before I Rise

一道计数题.

简化题意之后就是将一个只有环和链,边的种类为0,1交替的图,求满足交换节点之后图仍不变的排列数

先考虑某个环或链自身的交换方案数

1.环

在每个环内部交换的方案数为环的 \(size\)

2.链

节点数为奇数的链自身只有1种

偶数有2种

接下来考虑同种形态之间的排列,就是求排列数即可

但是需要注意分类,对于节点数为偶数的链还需要分为两种形态,例如

这两种是不能交换的

定义 \(a_i\) 为节点数为 \(i\) 的环, \(b_{i,0/1}\) 为长度为 \(i\) 的第一条边为 \(0/1\) 的链

所以有最后的公式

\(ans=\prod i^{a_i}*(a_i)!*\prod_{i/2\in Z}(b_{i,0})!*(b_{i,1})!*2^{b_{i,0}+b_{i,1}}*\prod_{(i+1)/2\in Z} (b_{i,0}+b_{i,1})!\)


LG3349 [ZJOI2016]小星星

LG3349 小星星

将问题抽象化:

一个 \(n\) 个节点的树,和一个 \(n\) 个节点的图,要求给树上的每个节点编号,使得编号是一个 \(1\)到 \(n\) 的排列,并且要满足树上任意一条边 \((u,v)\),图中一定要有边 \((x_u,x_v)\)( \(x_u\) 表示点 \(u\) 的编号),求方案数。

暴力的做法是定义状态 \(f[i][j][S]\) 表示节点 \(i\) 编号为 \(j\),\(i\) 的子树内的编号集合为 \(S\) 的方案数。

但是这样的瓶颈在于枚举子集,复杂度是 \(O(n^3\times 3^n)\) 的,显然TLE。

Q:为什么要记录 \(S\) 这一维?

A:要求中有「编号是一个 \(1\) 到 \(n\) 的排列」。

尝试把「编号是一个 \(1\) 到 \(n\) 的排列」这一条件去掉,就不用记录 \(S\) 了。

这样只需要定义 \(f[i][j]\) 为在 \(i\) 的子树内,点 \(i\) 的编号为 \(j\) 的方案数。

而这时候会出现重复编号,怎么办呢?

容斥!

先 \(2^n\)枚举 \(\{1,2,...,n\}\) 的一个子集 \(S\),强制规定树上每个点的编号必须是 \(S\) 的子集,然后每次 \(O(n^3)\) 一次DP,总方案数为:

\((∣S∣=n(|S|=n的方案数)−(∣S∣=n−1)-(|S|=n-1的方案数)+(∣S∣=n−2)+(|S|=n-2的方案数)−...)-...\)

复杂度降到 \(O(n^3\times 2^n)\) ,在UOJ上需要进行一定的常数优化。

本篇题解转载自

标签:方案,排列,数为,元素,笔记,数学,编号,节点
From: https://www.cnblogs.com/xu2006/p/17261489.html

相关文章

  • 数据结构做题笔记
    LG2827[NOIP2016提高组]蚯蚓用单调队列简单维护就可以做到$O(m\logm)$,但\(m\)有点大,我们就需要考虑特殊性质。注意到每次切割的蚯蚓长度一定小于前几次切割的长......
  • MySql随笔记基础
    XAMPP使用shell命令 每个数据库对应一个子文件夹 mysql进入mySQL的命令-urootuserroot登录用户-uroot-ppassword登录密码-p123showdatabases显示数据......
  • 3月阅读笔记3
    无论是以何种方式来进行设计,小型项目也能和大型项目一样从精心的设计之中获益,而如果能认识到设计是一项明确的活动,你就更会获益匪浅。设计过程充满了不确定性,因此设计技术......
  • 3月阅读笔记2
    软件构建是软件开发的核心活动;构建活动是每个项目中位移一项必不可少的工作软件构建的主要活动包括:详细设计、编码、调试、集成、开发者测试(包括单元测试和集成测试)构建......
  • 3月阅读笔记1
    首先要明确开发计算机软件是一个复杂的工程,并不比建设高楼大厦简单。这项活动和传统的土木工程类有相似的部分,也有迥然不同的地方。主要有下面的几种活动(根据进程推动顺序......
  • pwn学习笔记-栈溢出
    背景知识 函数调用栈函数调用栈是指程序运行时内存一段连续的区域,用来保存函数运行时的状态信息。包括函数参数与局部变量等。称之为栈是因为在函数调用时,调用函数的......
  • 阅读笔记-构建之法1
    《构建之法》第一章:软件=程序+软件工程。作为一名程序员,不能仅仅会写代码,深入了解一个软件是通过怎么样的层层工序制作出来,也是我们应当重点掌握的。文中通过生活实例,启发......
  • stm32学习笔记---i2c学习
    stm32学习笔记---i2c学习1、半双工,不能同时发送数据,一个设备发送另一个设备接受2、接受到数据有有应答3、能够挂在多个模块,且通信之间不受干扰,支持一主多从,多住多从4......
  • GNN(图)笔记
    图的基本概念不再详细描述有顶点(node,V)、边(edge,E),这里还有一个全局属性(global,U),但不知道具体表示什么边分为无向的边和有方向的边  三者都是通过向量来表示(embed......
  • 《构建之法》阅读笔记3
    第四章是《构建之法》中关于编程范式的章节,介绍了两种主流编程范式:面向对象编程和函数式编程。作者首先介绍了面向对象编程的概念和特点,通过一个简单的实例介绍了面向对象......