Test 2022.10.12

今天是关机专场

关于我好不容易写的题解因为关机而无了这件事

T1 理想的正方形

本来写了挺多的,现在不想多说了,简单来说就是维护一个二维的单调队列

一维单调队列

就是对每一行维护从i开始长度为n的区间中的最大最小值

二维单调队列

对我们一维单调队列维护出来所有处于同一列的值,纵向维护最大最小值,就可以得到一个矩形内的最大最小值了

Code

T2 凸多边形的划分

不想多说了,我写的是网络流,对每一个点,他可以和所有不和他相邻的边匹配,然后简简单单建模一下,直接跑MCMF就行了,但是有问题:会考虑到同一个三角形,即使在图上是完全不同的两组匹配,可能是我太菜了,反正按照我现在的网络流水平,我是无法处理这种情况的。

正解 区间dp

对于每两个点(记为l,r)的连线,我们考虑从lr的子多边形,把它划分成若干个三角形的最小化费,首先值得肯定的是,我们需要把动态规划的问题转化成每一个之前阶段的子问题,也就是说,这个子多边形还要划分成不同的子多边形,那么就是妥妥的区间动态规划问题问题了。

最外层枚举两个端点之间的距离len,然后是左端点l和中间点k,对于我们枚举的每个k:l,r,k的连线都会构成一个三角形,产生新的花费,同时把多边形割成两个子多边形加上中间的三角形,最后按着定义来就是区间dp的板子了

转移方程是这样的

dp[l][r]=min(dp[l][r],dp[l][k]+dp[k][r]+val[l]×val[r]×val[k])

小小注意

这个数据范围当然longlong也是无法存下来的,最方便的就是用int128

Code

T3 电路维修

可以01bfs但是我不会也可以最短路,既然是最小步数,那么理所应当的想到要么就是IDA,要么就是最短路了。

建图

对于给出的/,我们把当前格子拆成四个点,把左下角和右上角建一条边权为0的双向边,表示不用改动就可以从这两个点互相到达;把左上角和右下角建一条边权为1的双向边,表示需要改变一次才能使他们互相到达

对于给出的' \ ',我们做相反的操作就行了,应该很好理解

建图的正确性

不用赘述了吧

小小的注意事项

首先稠密图肯定不能用spfa了,然而这道题普通的dijkstra的效率是O((nm)2)的,所以还需要堆优化,复杂度就可以降到O(nmlognm)

Code

T4 换教室

一眼dp

分析

首先题目中给出的点数是小于200的,所以可以直接用Floyd预处理出每个点之间的最小距离,然后注意题目中是会给出重边的,甚至会存在自环,所以我们需要特判一下,并且每次输入的边应该和当前的边取最小值才行,然后注意每个点到自己的距离一定是0,因为当前这节课和上一节课上课的教室可能是同一间,所以当前点到当前点的最小距离应该是0

设计dp方程

很容易看出来这道题的阶段是前i间教室,然后状态就是用了j次换教室的机会,但是这个时候,我们仍然无法涉及到换课与否,所以应该另外引入一维状态k:0/1表示当前状态是否选择了换课

然后dp定义出来了转移按照定义就应该很好写了

第一种情况:当前选择不换课dp[i][j][0]

那么就需要从第i1个阶段转移过来,此阶段可能申请换课,也可能不会,于是我们把每种可能乘以他的期望

写出来就是dp[i][j][0]=min(dp[i1][j][0]+dis[c[i1]][c[i]],dp[i1][j][1]+dis[c[i1]][c[i]]×(1k[i1])+dis[d[i1]][c[i]]×k[i1])

第二种情况:当前选择换课dp[i][j][1]

同样需要从第i1个阶段转移过来,可能换课,也可能不会

写出来是

dp[i][j][1]=min(dp[i1][j1][0]+dis[c[i1]][c[i]](1k[i])+dis[c[i1]][d[i]]k[i],dp[i1][j1][1]+dis[c[i1]][c[i]](1k[i])(1k[i1])+dis[d[i1]][c[i]](1k[i])k[i1]+dis[c[i1]][d[i]]k[i](1k[i1])+dis[d[i1]][d[i]]k[i]k[i1])

初始化

注意dp[1][0][0]=dp[1][1][1]=1

答案

ans=minmini=0Mdp[N][i][1],dp[N][i][0]

Code

posted @   Hanggoash  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
动态线条
动态线条end
点击右上角即可分享
微信分享提示