首页 > 其他分享 >2024.11.5 闲话

2024.11.5 闲话

时间:2024-11-05 21:09:21浏览次数:1  
标签:2024.11 sta 闲话 S1 超集 子集 S2 rep

别人的闲话都推图or歌,我的鲜花啥也没有。我也没啥可推的啊,求图or歌

高维前缀和

常见的柿子是\(s_{i,j} = s_{i-1,j} + s_{i,j-1}-s_{i-1,j-1}+a_{i,j}\)。

但是还可以一维一维求。

点此查看代码
rep(i,1,n,1) rep(j,1,m,1) a[i][j] += a[i-1][j];
rep(i,1,n,1) rep(j,1,m,1) a[i][j] += a[i][j-1];

三维同理,高维也是一样的套路,时间复杂度\(O(\text{维度}\times n^{\text{维度}})\)。

SOSDP

考虑这道题。

给定一个长度为\(2^n\)的数组\(a\),定义\(f_{i}=\sum\limits_{j\And i=i}a_j\),\(\forall i\in [1,n]\),求\(f_i\)

一个显然的暴力就是枚举\(i,j\),时间复杂度\(O(4^n)\)。再一个显然的暴力是对于每一个\(i\),枚举子集,时间复杂度\(O(\sum_{k=0}^n2^k)=O(3^n)\)。

如何枚举二进制子集

令\(t=s\),然后不断令\(t=(t-1)\And s\),即可枚举\(s\)的所有子集。

证明的话可以自己模拟理解一下或者bdfs。

但是如果\(n\le 20\),那么上面两种方法就似了。现在考虑如何优化\(3^n\)的暴力。发现这个暴力的缺陷是当一个状态的二进制位上有\(k\)个\(0\)的时候,它会被访问\(2^k-1\)次,这是非常不优秀的。

定义集合\(S(sta)=\{x|x\subseteq sta\}\),然后定义\(S(sta,i)=\{x|x\subseteq sta \And\And sta\oplus x < 2^{i+1}\}\)

看起来可能很不好理解,说人话就是只有第\(i\)及以后位与\(sta\)不同的\(x\)的集合(注意此处是从0开始)。例如\(S(\)1011010,3\()=\{\)1011010,1011000,1010010,1010000\(\}\)。

尝试将\(sta\)与\(x\)联系,根据\(sta\)的第\(i\)位数,分情况讨论。

  • 第\(i\)位为\(0\)

    那么显然有\(S(sta,i)=S(sta,i-1)\)

  • 第\(i\)位为\(1\)

    还是要按照\(x\)的第\(i\)位的数分两种

    • 为\(0\),那么就是\(S(sta\oplus 2^i,i-1)\)
    • 为\(1\),那么就是\(S(sta,i-1)\)

    所以\(S(sta,i)=S(sta,i-1)+S(sta\oplus 2^i,i-1)\)

画出图来大概就是这样的东西,其中红色前缀表示这一部分是公共的,而黑色部分允许不同。

容易发现这是个\(DAG\)。(你可能会认为这是个有根树,这是错误的,考虑当\(sta\)不同但\(i\)相同时,可能有一个点有两个及以上前驱)然后就可以直接根据这个跑dp了。

点此查看代码
rep(i,0,(1<<n)-1,1) f[i] = a[i];
rep(i,0,n-1,1) rep(j,0,(1<<n)-1,1) if(j&(1<<i)) f[i] += f[i^(1<<j)];

其实这玩意还可以求超集和。

超集是(cjs)什么

定义:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集,反过来,S2是S1的子集。 S1是S2的超集,若S1中一定有S2中没有的元素,则S1是S2的真超集,反过来S2是S1的真子集。

其实核心代码差不多

点此查看代码
rep(i,0,(1<<n)-1,1) f[i] = a[i];
rep(i,0,n-1,1) drep(j,(1<<n)-1,0,1) if(!(j&(1<<i))) f[i] += f[i^(1<<j)];

感性理解一下,就是把二进制中的\(0,1\)反过来看。

\(but\),到现在为止,还没说这玩意和高维前缀和有什么关系。

其实非常简单,看\(f_{i}=f_{i}+f_{i\oplus (1<<j)}\),这个就是一个前缀和。

题单

标签:2024.11,sta,闲话,S1,超集,子集,S2,rep
From: https://www.cnblogs.com/hzoi-Cu/p/18528858

相关文章

  • 2024.11.5 人工智能在小学教育教学中的应用
    【知识小课堂1】概念与历史人工智能(ArtificialIntelligence),引文缩写为AI。它是研究、开发用于模拟延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。(一)学科范畴人工智能是一门边沿学科,属于自然科学、社会科学、技术科学三向交叉学科。(二)涉及学科与......
  • 2024.11.05 刷题训练
    2024.11.05刷题训练P7054NWRRC2015Graph构造题,把拓扑序中的队列换成小根堆是最小字典序,此时设置一个大根堆,用于处理连边问题。设\(lst\)是上一个拓扑序中的节点。小根堆堆顶大于大根堆,当前位置最优解,不耗费连边数量。小根堆堆顶小于大根堆,若\(k\)不为\(0\)加入到大......
  • 2024.11 做题笔记
    2024.11做题笔记其实是CSP后到NOIP前的部分10.28怎么KTSC这么困难啊……B.P11237「KTSC2024R1」警察与小偷把警察、小偷所在路径拎出来,此时警察一定往小偷所在方向走,而小偷可以在警察到路径上的某点之前从这点走向路径外,想选尽量长的路径,让警察走的尽量多但可能......
  • 2024.11.4~2024.11.9
    2024.11.4今天早上没有醒来,一抬表发现7:03了直接破防(悲上午模拟赛T1直接一个没思路,想了1h都没想出来,打了10分遗憾离场,T2直接就是死磕1h也没有丝毫思路,然后最后10分非常惨下午都在调T1,直到4点才调完,晚上情绪状态比较不稳定,但是调整的很好,还是坚持做了5到题,比较可以csp-s160分完......
  • 2024.11.04
    今天心情不好,不写模拟赛了模拟赛的内容在学校写完得了,回家写小作文睡觉模拟赛没怎么好好打。第二次打构造题,这种题和其他的是真的不一样。看来我不仅要恶补各种算法,还要锻炼一下我的思维。猜猜今天有没有题目小链接T1【串】题目大意:给出n,k(1<=n,k<=1e5),要求构造出长度为n......
  • 云原生周刊:微服务架构 2025 年的发展趋势 丨2024.11.4
    开源项目推荐KrakenDKrakenD是一个面向Kubernetes的API网关,专注于高性能和低延迟,旨在优化微服务之间的API调用。支持流量路由、负载均衡、速率限制和API聚合,极简配置。OctoDNSOctoDNS是一款为多云和混合云架构设计的DNS配置管理工具,支持多种DNS提供商,满足复杂环......
  • 2024.11.4 test
    B你可以进行以下的操作:选择一个点染白色;此后每次染有白色点相邻的,且\(a_i\)最小的点。\(q\)次询问每次给出\(p,k\),问有多少种选择点的方案,使得\(p\)是第\(k\)个选到的。\(a_i\)是排列。\(n,q\le1e5\)。设\(l=p-k+1,r=p+k-1\),若\([l,p-1]\)能取到且\(a_p<a_{l-1}......
  • 2024.11.1(周五)
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=......
  • 《人件集》阅读笔记2(2024.11.1)
    一、章节内容梳理(一)第五章:环境与协作的交织这一章让我深刻认识到办公环境对软件开发人员的重要性。无论是物理空间的布局,还是设施的配备,都如同隐形的手影响着工作效率和团队沟通。从开发人员的角色定位角度看,合适的环境能让他们更清晰地明确自己在团队中的位置,更好地发挥专长。......
  • 2024.11 训练记录
    训练记录11.1补题,怒学LCT。没学会。theend。只会splay。辅助树太难了。11.2无。休息日就摸了一整天鱼,都干了啥我一点也记不清了。11.3noip10连估分100+0+20+30=150实际60+0+20+45=125T11e5二分答案\(nlog^2n\)卡完了。咋这样。赛后换了一个快......