首页 > 其他分享 >Educational Codeforces Round 151 (Rated for Div. 2) E

Educational Codeforces Round 151 (Rated for Div. 2) E

时间:2024-05-29 17:36:35浏览次数:19  
标签:151 状态 Educational Rated 可以 这个 移动 dp 个球

链接

凌晨两点半突然醒了。。然后睡不着了。。躺了一个半小时决定起来啃题解。
花了一个小时弄懂了。但是要怎么自己想到还没想好。这个属于计数dp的范围了,我不是很熟悉了。

题目大意:

有n个盒子,里面装了一些球,球的数量大于等于1且小于n。
可以进行一种操作,每次操作可以把一个球移动到一个相邻的没有球的盒子里。
你一共可以进行k次操作,问,这k次操作全部执行完毕可以产生多少种不同的球的分布情况。

数量可能很大,答案mod1e9

有什么想法?
dp不好做吧。假如我要做dp,我要如何记录状态?
不好记录。要先尝试总结出来这个题目的特征。(感觉2500之后的题目,这一步绝对是必要的步骤)
可以发现,我们可以使用两次操作并且使得序列不变。
这让统计要求的不重不漏更加复杂。

但是我们其实可以发现,重复的情况一定是由一个球先向左再向右移动而产生的。否则是绝对不可能发生重复的。
到这里就是我能够学到的第一个思路
既然一定是由这种结构产生的,也就是,我可以先统计所有至少需要使用了\(k'\)次操作才能产生的情况数。
根据刚刚发现的,其实使用\(k'\)次能够产生的,就是所有小于\(k'\)且和\(k'\)奇偶性相同的方案数之和。

而这种计算的最重要的地方在于,这是可以作为状态的。很明显,我们的dp很容易就能够从比\(k'\)小的地方转移到\(k'\),因为我们前面统计的答案都是有最优属性存在的,所有想要继续保持这个属性并不难。

这个dp写多了应该是有感觉的,不算难想。如果给出了这个统计至少需要使用了\(k'\)次操作才能产生的情况数的思路的话。

那么我们其实就能够写出dp的状态与方程了。
啊,好像还有一些特点需要分析一下。
首先,两个球的移动轨迹是不可能相交的。也就是原本初始状态下的第\(i\)个球,在外面的答案统计里面,也是第\(i\)个球。
第二,球是单向移动的。否则就无法满足不重不漏了,这个是上面的分析。

那么其实我们的决策就是决策一个球放在哪里。

\(f[i][j][k]\)表示前\(i\)个盒子,已经安排好了\(j\)个球了,且使用了\(k\)次机会时,使得这\(k\)次机会没有浪费能够产生多少种方案数。

转移就是2种。一种是第\(i\)个盒子不放球。直接\(f[i][j][k]+=f[i-1][j][k]\)
一种是第\(i\)个盒子放第\(j\)个球\(f[i][j][k]+=f[i-1][j-1][k-abs(c[j]-i)]\)
其中\(c[j]\)表示第\(j\)个球的初始位置。

可以发现,这个dp是\(O(n^2k)\)的。
很不幸。\(n,k\leq 1500\)。
刚好喵。被卡了。

更不幸的是,我的dp经验告诉我这种转移,还是计数dp的转移,不会有常规dp的优化方法。

转移没法优化。那也就是状态要改。

完全没有思路啊。。。让我自己想的话。
这还能怎么优化。。。这能优化是真离谱。

虽然看完了题解能够理解,但是我自己要能想到。。。也太难了。
cf给的题解不适合直接想。优化的方案绝对不止这一个。写完我去看看。
启发性极弱。

做法是这样的。
通过上面的分析,我们其实可以再发现一个很重要的性质。
小球的移动其实可以再次简化。每个位置其实我们可记录经过这个位置向左和经过这个位置向右的小球的个数。
在我们上面的dp求的答案中,一个位置不可能同时有向左移动的球和有向右移动的球,很明显这样是不优秀的。这样并不满足我们最短的需求。
于是第二维的状态可以进行更换,\(f[i][j][k]\)表示前\(i\)个盒子,当前位置经过的球有\(j\)个,且使用了\(k\)次机会时,使得这\(k\)次机会没有浪费能够产生多少种方案数。其中,第二维是带正负的,就是可以理解为\(j<0\)时,表示当前有球需要经过这里从右边移动到左边,而当\(j>0\)表示有球需要经过这里从左边移动到右边。

这样的状态和上面的状态是等价的。其实确实也是可以发现最开始的状态是有大量的空间和时间浪费的,有大量的明显不合法的情况被尝试转移。虽然这方面并不够支持我想到这个做法,但是也是一个思路吧。

那么,即使是这个状态,也是\(O(n^2k)\)的啊,第二维的变化并不能改变什么。
我们考虑第二维度的大小和转移。
可以发现一个等式,对于一个完整的状态,经过每个位置的移动的总数的和一定等于\(k\),也就是\(\sum j= k\),而,\(j\)的转移,每个位置其实和它转移而来的位置的数值上相差只能是1 。也就是\(j\)的序列其实最大最大的情况就是,假设长度为\(t_j\) , 就是\(1+2+...+t_j+t_j-1 +t_j-2+...+2+1\)。那么,就可以高兴的发现,我们可以根据这写出一个不等式 ,\((t_j+1)\times t_j \leq k\),而这个不等式的解,是\(t_j\leq 55\) 。第二维度的大小不会超过\(55\times 2\)。乘\(2\)是因为正负的原因。
那么,第二维原本的\(O(k)\),就被优化到了\(O(\sqrt k)\),而整体的复杂度就是\(O(nk^{1.5})\)
可以通过。

对于E的总结

  1. 其实第一个dp,我就是很难想到了。我对于这个没有任何状态划分的思路。这个状态设计的最重要的思路,就是求最小的,而不是所有的。想到了这个,做dp才是可能的。
  2. 小球的移动是单向的而且不可交叉。要是能想到第一点这一点不可能想不到,但是同样也是非常重要的。
  3. 而想到了上面两点,也只能做出第一\(n,k\leq1000\),而1500真的太恐怖了。想不到,这个优化。
  4. 第二个dp,最重要的是需要注意到第二维度状态的时空浪费,以及移动方向不交叉的性质。这还是我第一次利用这个优化dp。
    很独特,也很有意思。值得记录。

标签:151,状态,Educational,Rated,可以,这个,移动,dp,个球
From: https://www.cnblogs.com/HLZZPawa/p/18220732

相关文章

  • POSEIDON: Privacy-Preserving Federated NeuralNetwork Learning
    写在最前面,感觉这一篇的技术更贴近于密码学,所以部分核心技术读起来比较吃力。仅供大家参考哇~Abstract—Inthispaper,weaddresstheproblemofprivacypreservingtrainingandevaluationofneuralnetworksinanN-party,federatedlearningsetting.Weproposea......
  • [CF1517F] Union
    计数好题。关键点在于一步转化,然而我并没有发现。首先期望转计数,对于这类问题,我们有很经典的处理手法:\(\sum_r\sum_S[f(S)=r]r=\sum_r\sum_S[f(S)\ger]\)。但是我并没有发现这一步的意义。事实上,这个条件写到树上就是,存在一个点,使得离它最近的非空闲点距离\(>r\)。然后就可......
  • CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!)
    切5道。A\([a_1=1]\)B\(\max(\max(xy),\max(x^2),\max(y^2))\)第一部分可以选整个数组,第二部分和第三部分是最大连续0段和1段。C操作等价于\(a_{l\simr}\oplus1\),\(b_{l\simr}\oplus1\),\(b_{1\simn}\oplus1\)。考虑先把\(a\)全部变成\(0\),使用ii......
  • Mybatis框架 <insert> 标签内 useGeneratedKeys="true" 和 keyProperty="xxx" 属性
    useGeneratedKeys="true" 和 keyProperty="secondIndex" 这两个属性经常与MyBatis(Java持久层框架)的 <insert> 标签一起使用。这两个属性主要用于在插入记录后,从数据库返回的自动生成的主键或其他键值中,获取该键值并将其设置到Java对象的某个属性中。useGeneratedK......
  • CF1515F Phoenix and Earthquake
    CF1515FPhoenixandEarthquake证明题。思路考虑不合法的情况,如果\(\suma_i<(n-1)\timesx\),肯定是不合法的。再考虑对于一个可行的情况,最后缩的边肯定形成一棵树,所以我们大胆假设:任意一棵生成树只要满足\(\suma_i\geq(n-1)\timesx\)有合法的缩边方案。考虑归纳证......
  • (FPGA) XCKU15P-1FFVE1517E XCKU15P-3FFVE1517E XCKU15P-2FFVE1517E IC适用于智能IP集
    Kintex™UltraScale+™器件在FinFET节点中提供高性价比,为需要高端功能(包括33Gb/s收发器和100G连接内核)的应用提供了经济高效的解决方案。该中端产品系列同时支持数据包处理和DSP密集型功能,是无线MIMO技术、Nx100G有线网络、以及数据中心网络和存储加速等应用的理想选......
  • 群晖ds1517+解决第三方Marvell AQC107 10Gbe网卡驱动问题
    群晖ds1517+解决第三方MarvellAQC10710Gbe网卡驱动问题转载注明来源:本文链接来自osnosn的博客,写于2024-05-15.说明这是网友mohawk解决问题的经过,征得同意后,贴在这里。给大家参考。背景好友打算升级到全屋有线万兆2.5g网络,陆续装备了路由器、交换机等,但家里的群晖ds......
  • 代码随想录算法训练营第第八天 | 344.反转字符串 、541. 反转字符串II、卡码网:54.替
    344.反转字符串建议:本题是字符串基础题目,就是考察reverse函数的实现,同时也明确一下平时刷题什么时候用库函数,什么时候不用库函数题目链接/文章讲解/视频讲解:https://programmercarl.com/0344.反转字符串.html/***@param{character[]}s*@return{void}Donotret......
  • 基于UltraScale架构的XCVU3P-3FFVC1517E XCVU3P-2FFVC1517I XCVU3P-1FFVC1517E高性能
    概述VirtexUltraScale+器件是基于14nm/16nmFinFET节点的高性能FPGA,支持3DIC技术和多种计算密集型应用。AMD第三代3DIC使用堆叠硅片互联(SSI)技术打破了摩尔定律的限制,并且实现了最高信号处理和串行I/O带宽,以满足最严格的设计要求。它还提供了一个虚拟的单片设......
  • P1516 青蛙的约会
    问题可以转化成一个同余方程ax+by=c(a>0)(如果a是负的,要将a和c都变号)关于这个方程的求解,可以用拓展欧几里得算法解决#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<unordered_map>#include<string>#include<vector>#include<......