首页 > 其他分享 >【做题笔记】NOIP真题们

【做题笔记】NOIP真题们

时间:2023-11-15 16:35:35浏览次数:35  
标签:这个 题意 NOIP 真题 元素 个数 笔记 times dp

[NOIP2022] 种花

题意

不太好描述,感性理解(

题意

一道计数类问题。不难发现 F 形只需要在 C 形的基础上在末尾伸出一小支就好了。所以我们先考虑 C 形的计数方案。

图形计数类一个基本的 trick 就是枚举拐点,因此我们考虑枚举下面这一行的拐点(也就是首个种花的位置)\((i,j)\)。令上面所有行对它的贡献为 \(k\)。那么这个拐点的最终贡献就是 \(sum[i][j]\times k\),\(sum[i][j]\) 表示从 \((i,j)\) 开始最多能扩展多少位种花的位置。

考虑计算这个 \(k\)。根据之前的分析,\(k=\sum\limits_{l=las}^{i-1} sum[l][j]\),\(las\) 表示从 \((i,j)\) 能向上扩展到的最后一个可以种花的位置。这两个东西都可以前缀和维护一下就好。

对于 F 形,我们只需要计算到 \((i,j)\) 为止有多少个拐点在这一列的 C 形,把它延伸到这一行就好。注意要先判断这个位置能不能种,不能种的话要清零。然后把目前的 C 形的贡献加上,再更新这个拐点贡献的 C 形,最后更新这个拐点对 \(k\) 的贡献。

[NOIP2022] 喵了个喵

题意

给你一个 \(n\) 个栈,和 \(k\) 种卡牌,每种卡牌都有偶数张。在将一种卡牌放进一个栈顶后,你可以做以下两种操作:

  1. 将栈顶的两种相同元素消去
  2. 选取两个栈底元素相同的栈,将这两个元素消去

求构造一种操作方案使得最后所有牌都能消除。

题解

不会实现所以先估着。

[NOIP2022] 建造军营

题意

选择一个点集和边集,要求切断任意一条不在边集中的边后都不影响点集中的点两两之间的连通性。求选择点集,边集的方案数。一种方案数是不同的当且仅当它选择这种点集和边集的搭配没出现过。

题解

由于只能切断一条边,所以在一个边双连通分量里面的所有点都是不受影响的。因此我们可以先求出边双连通分量,只看桥的那些边,这样就可以把图转化成树。

假设我们现在选的兵营分别在第 \(i\) 和第 \(j\) 个连通分量中,那么 \(i\) 到 \(j\) 的路径上的所有边都要选。因此状态不仅和当前枚举的是哪个点有关系,还跟这个点有没有选有关系。因此我们令 \(dp[i][0/1]\) 表示在 \(i\) 的子树内且点 \(i\) 里面有没有兵营的方案数。

考虑这个状态为什么能包含所有情况。我们令有兵营的点为关键点,根据虚树的求法可知,这些若干个关键点一定有一个公共的 lca。因此这个 \(dp[i][0/1]\) 中的 \(i\) 实际上是枚举这个最高的节点。

\(dp[x][0]=(2^{num[x]}-1)\times (\prod 2\times dp[v][0])(v\in son_x)\),\(2\) 的意义是 \(v->x\) 这条边能不能选都行,这个显然。对于 \(x\) 的子树里面有军营的情况,还可以分成两种情况。一种是 \(x\) 这个点里面就有军营,这一种的贡献是 \(2\times dp[v][0]+dp[v][1]\),同理,当 \(v\) 里面什么也没选的时候这条边可选可不选,里面选了的话这条边就一定选。另一种是 \(x\) 这个点里面没有军营,这一类的贡献是 \(\prod (dp[v][0]+dp[v][1])-\prod dp[v][0]\)。但实际上,我认为这个式子当且仅当我们定义 \(x\) 的子树包含它到 \(fa[x]\) 的这条边的时候方便处理。这里我并没有让 \(x->fa[x]\) 这条边包含在 \(x\) 的子树内,因此更方便的转移式是每次新增一个点时,\(dp[x][1]=dp[x][1]\times (dp[v][1]+2\times dp[v][0])+dp[x][0]\times dp[v][1]\),前面是分类讨论在 \(v\) 之前已经有点有军营了,后面是分类讨论 \(v\) 是第一个有军营的点。这个实际上可以归类为一个 trick,如果要求必须有一个点选,我们可以分类讨论它是第一个选的点还是随便怎么选的点。

令 \(siz[x]\) 表示 \(x\) 这个点内有多少个小点,\(e[x]\) 表示 \(x\) 这个点内有多少条边。初始化 \(dp[x][0]=2^{e[x]}\),\(dp[x][1]=2^{siz[x]+e[x]}-dp[x][0]\)。

总结

对于这类题,我们首先可以通过题的特殊性质简化题,或者看到特殊性质分想到此题可以用边双变成一颗树。然后在做树形 dp 的时候,可以先设出第一维,然后考虑转移还跟什么有关。对于转移式便需要用到分类讨论了。

[NOIP2021] 数列

题意

  • 给出每个数对应的权值
  • 需找出所有符合 \(S=2^{a_1}+2^{a_2}+...+2^{a_n}\) 二进制中 \(1\) 的个数不超过 \(k\) 的 \(a\) 序列。
  • 求出所有符合条件的 \(a\) 序列权值积的和

题解

显然可得是计数 DP

对于一个序列 \(a\),最终的结果会跟 \(S\) 二进制中 \(1\) 的个数有关(判断可行性),\(a\) 中的元素有关(求出权值)。

事实上,由于并不能保证序列 \(a\) 中所有元素互不相等,所以还需判断 \(S\) 中进位的个数。

于是设出状态:\(dp_{i,j,k,p}\) 表示目前已经讨论了 \(S\) 从低位到高位的前 \(i\) 位和 \(a\) 中的 \(j\) 个元素,此时 \(S\) 中有 \(i\) 个 \(1\),需向下一位进位 \(p\)

若序列 \(a\) 中有 \(t\) 个 \(i\) 元素,那么易得此时 \(S\) 中第 \(i\) 为应该是 \((t+p)\bmod 2\),向下一位进位 \(\frac{t+p}{2}\)。

所以下一个状态以及转移应是:\(dp_{i+1,j+1,k+(t+p)\bmod 2,\frac{t+p}{2}}=dp_{i,j,k,p}\times v_i^t\times C_{n-j}^t\)

解释下组合数的意思,首先最表面看就是 \(n-j\) 个数中取出 \(t\) 个数。这里指由于已经确定了长度为 \(n\)的序列 \(a\) 中 \(j\) 个位置,剩下 \(n-j\) 个位置中有 \(t\) 个 \(i\) 元素,总的方案数就是 \(C_{n-j}^t\)。

统计答案时,\(S\) 最高维不会超过 \(a\) 中元素的最大值也就是 \(m+1\),第二维同理也不会超过 \(n\)。

但是在 \(S\) 的第 \(m\) 位后还有可能进位,这时候还需处理一下第 \(m\) 位后 \(1\) 的个数。

(哇酷,自己打了一遍题解果真理解了很多)

标签:这个,题意,NOIP,真题,元素,个数,笔记,times,dp
From: https://www.cnblogs.com/Cloote/p/17635139.html

相关文章

  • Python3 协程 await async 相关的用法和笔记
    想要提供可以进行协程切换的awaitable,可以使用下面的方法:1任务taskasyncdeffunc():print("yesWait")task=asyncio.create_task(func())awaittask2协程对象,可以使asyncdef定义的协程函数(是否能触发切换不一定,要看函数内容)函数内可以利用asyncio.sl......
  • 图论——最小生成树 学习笔记
    图论——最小生成树学习笔记本文仅对于无向连通图。生成树,SpanningTree(ST),在一个\(n\)个点的图中选取\(n-1\)条边,构成一棵树。最小生成树,MinimumSpanningTree(MST),通常是边权和最小的生成树。算法分类:算法PrimPrim堆优化Kruskal思想加点加点加边时间......
  • 2023NOIP A层联测31 T4 民主投票
    2023NOIPA层联测31T4民主投票思维好题。思路首先可以设\(s\)每个人最多获得的票数,一开始所有点都把自己的票投给自己父亲。如果一个点的票数超过\(s\)了,那么这个点肯定要把票分给他的父亲。设\(f_{u,s}\)为\(u\)点在最多获得\(s\)票的情况下要向父亲分的票数(不......
  • 第十二章学习笔记、知识完整性总结
    摘要:本章讨论了块设备I/O和缓冲区管理;解释了块设备I/O的原理和I/O缓冲的优点;论述了Unix的缓冲区管理算法,并指出了其不足之处;还利用信号量设计了新的缓冲区管理算法,以提高I/O缓冲区的缓存效率和性能;表明了简单的PV算法易于实现,缓存效果好,不存在死锁和饥饿问题;还提出了一个......
  • 学习笔记419—如何快速从Github下载文件
    如何快速从Github下载文件从国内下载Github文件的速度往往会很慢,因此有一些开发者提供了代理下载功能,这些服务都是免费的,你甚至可以通过开源代码自建Github下载官网:https://d.serctl.com这是一个简单干脆的Github文件代下网站,提供八个下载节点,你可以从中选择最快的节点下载 使用方......
  • 硬件开发笔记(十一):Altium Designer软件介绍、安装过程和打开pcb工程测试
    前言  前面做高速电路,选择是阿li狗,外围电路由于读者熟悉AD,使用使用ad比较顺手,非高速电路就使用AD了,其实AD也可以做高速电路,由于笔者从13年开始做硬是从AD9开始的,所以开始切入AD做硬件软件学习成本会低很多。 AltiumDesigner简介  AltiumDesigner是原Protel软......
  • 软件设计开发笔记5:QT开发三参数温室气体数据记录软件
      最近有一个为三参数温室气体分析仪及其多通道换向阀箱编写数据记录和控制的需求。所以在这一篇中我们就来分析一下如何使用QT实现这一需求。1、需求分析  虽然说传递过来的需求只有“实现一个三参数温室气体分析仪及其多通道换向阀箱的数据记录和控制”这样一句话,但所有人都......
  • 第五周阅读笔记|人月神话————削足适履-关注程序的空间规模和空间控制技能
    削足适履这个章节在讲什么?我们很多时候在开发程序的时候都是考虑程序的运行时间和效率,而很少考虑到程序的运行空间问题。现在的存储空间是越来越廉价,我们很少去考虑这些问题。经典的DOS版本的仙剑奇侠传还不到20M,而现在的一个大游戏却是2,3G甚至更大。由于计算机的不断更新换代和......
  • 【洛谷 P1089】[NOIP2004 提高组] 津津的储蓄计划 题解(循环)
    [NOIP2004提高组]津津的储蓄计划题目描述津津的零花钱一直都是自己管理。每个月的月初妈妈给津津元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上还给津津。因此津津制定了一......
  • 图论——最短路 学习笔记
    图论——最短路学习笔记其实是复习性质的,主要是总结,证明什么的,等上大学再说。定义单源最短路:从一个点\(q\)出发,到其他所有点的最短路。全源最短路:任意两点见最短路。算法对比算法FloydJohnsonBellman–FordSPFADijkstra类型全源全源单源单源单源......