PA2014部分题解

本文解析了PA2014竞赛中的多个题目,包括[Pakowanie]背包问题的状压DP解决方法,[Parking]停车问题的空间优化策略,[Druzyny]团队问题的复杂度分析,以及[Muzeum]博物馆问题的最大权闭合子图模型。文章深入探讨了各种算法技巧和数据结构应用,如线段树、树状数组、单调队列等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

之前有一些写过了大概扔在奇奇妙妙的地方…
可能翻一下blog能翻得到的
瞎写一下最近的题吧

bzoj3717: [PA2014]Pakowanie

2242^{24}224这个状压和爆搜尴尬的地位…90s90s90s果断状压了
把包从大到小排序,记一个pairpairpairdp[mask]dp[mask]dp[mask]表示装完状态里的这些东西需要用到哪个包,并且最后一个包剩下多少容积,这显然是从大往小装并且能装的越多越好嘛…
转移枚举000位,可以lowbitlowbitlowbit优化
听说复杂度是靠谱的2n−1n2^{n-1}n2n1n

bzoj3718: [PA2014]Parking

随意想一下,我们可以首先把这些矩形拉到互不相交的位置
即保证每个矩形上下都是没有矩形的
那么,假如两个矩形先后顺序最后需要调换的话,显然这个厚度需要能让他们调换
即满足任意两个需要交换的矩形都能交换,那么这是合法的
线段树随意维护一下?
树状数组也可以的

**bzoj3711: [PA2014]Druzyny

这个题妙
首先有一个nlog2nnlog^2nnlog2n的做法,即直接分治然后讨论转移
这个ddd的性质,如果我们令g[i]g[i]g[i]表示只考虑ddd的限制,iii最远能从哪里开始转移
显然g[i]g[i]g[i]单调不减,可以用一个单调队列预处理出来
那么我们考虑怎么满足ccc的限制
约定midmidmid表示[l+1,r][l+1,r][l+1,r]区间的最大值的位置,则solve(l,r)solve(l,r)solve(l,r)表示处理[l,mid−1][l,mid-1][l,mid1][mid,r][mid,r][mid,r]的转移
显然我们这一段区间需要满足ccc的限制均为c[mid]c[mid]c[mid]
那么思考如何转移
对于g[i]>=midg[i]>=midg[i]>=mid,直接结束转移
对于g[i]>=lg[i]>=lg[i]>=l的,显然能转移的区间是已知的一段,那么直接在线段树上查找
对于g[i]&lt;lg[i]&lt;lg[i]<li−(mid−1)&lt;c[mid]i-(mid-1)&lt;c[mid]i(mid1)<c[mid]iii每向后移动一位只会多一个可以转移的位置,用一个变量O(1)O(1)O(1)维护转移即可
对于g[i]&lt;lg[i]&lt;lg[i]<li−(mid−1)&gt;=c[mid]i-(mid-1)&gt;=c[mid]i(mid1)>=c[mid]的,显然满足这样的数是连续一段并且在该区间仅有一段,二分出右端点在线段树上打标记修改
然后又是一个炫酷的复杂度分析
对于第二个操作,虽然目测是nlog2nnlog^2nnlog2n的复杂度,但是对于每个点,满足l&lt;=g[i]&lt;midl&lt;=g[i]&lt;midl<=g[i]<mid的区间仅会有一个,所以复杂度是nlognnlognnlogn
对于第三个操作,在每个区间中指针最多只会移动min(x,len−x)min(x,len-x)min(x,lenx),那么这个是启发式合并的复杂度,也是nlognnlognnlogn
对于第四个操作,显然是nlognnlognnlogn
所以就变成优越无比的nlognnlognnlogn了??
感觉考场上遇到这个复杂度分析的题就算想到了也会认为是nlog2nnlog^2nnlog2n的然后自闭?

**bzoj3716: [PA2014]Muzeum

好题
首先一看就是个最大权闭合子图的裸模型
然后naive的以为是奇妙技巧建边跑假的复杂度的网络流?
然后就想不出来奇妙技巧了…
然后…发现这个东西我是根本不会想的啊…从来都是最小割=最大流,从来没有转化回去更改题意来做…
首先,我们可以把每个点的坐标变为(xi∗h,yi∗w)(x_i*h,y_i*w)(xih,yiw),因为视野可以看成一个(−w,−h)(-w,-h)(w,h)的向量,相互乘一下就变成(−1,−1)(-1,-1)(1,1)的向量,那么视野就变为了直角
然后再旋转一下坐标系,使得视野变为在第二象限
xxx从小到大扫,现在我们变换了问题
从每个保安流流量到物品那里,求最大流多少
那么每个保安,肯定先流yyy最小的,流完之后再流yyy次小的
以此类推
过程用一个set维护
要记住这种 把最小割换为最大流,然后转化为贪心问题的套路啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值