首页 > 其他分享 >CF1239E Turtle

CF1239E Turtle

时间:2022-10-25 11:45:53浏览次数:51  
标签:Turtle geq sum CF1239E times leq

CF1239E Turtle

给定 \(2\times n\) 的棋盘,要求重新安排布局,使得所有从 \((1,1)\) 走到 \((2,n)\) 的路径中最大点权和最小。 \(n\leq25,a_i\leq5\times10^4\) 。

首先确定每一条路径都是 \((1,1)\rightarrow(1,i)\rightarrow(2,i)\rightarrow(2,n)\) ,那么一个显然的贪心策略就是安排第一排单调递增,第二排单调递减。又因为 \((1,1)\) 和 \((2,n)\) 作为必然会经过的 \(2\) 个点,所以挑选最小的两个 \(a_i\) 一定最优。

考虑剩下的 \(2\times(n-1)\) 个点,设 \(a_2\leq a_3\leq a_4\leq\cdots\leq a_n\) , \(b_1\geq b_2\geq b_3\geq\cdots\geq b_{n-1}\) ,表示第 \(1\) 行和第 \(2\) 行的数。依次考虑枚举中转点 \(i\) 。则答案的增量 \(\Delta=a_i-b_{i-1}\) ,由于 \(a_i\) 递增, \(b_i\) 递减, \(\Delta\) 将递增。即,答案的差值递增,答案为单谷函数。所以当 \(i\) 取到 \(1\) 或 \(n\) 时最大。

那么答案就变成了求 \(\max(\sum\limits_{i=2}^{n}a_i,\sum\limits_{i=1}^{n-1}b_i)+a_1+b_n\) 。即,需要求剩下 \(2\times(n-1)\) 个数取 \(n-1\) 个数这 \(n-1\) 个数的和尽可能接近这 \(2\times(n-1)\) 个数的和的一半。那么由于值域不大,可以使用背包的方法在 \(n^2\sum a_i=n^3a_i\) 的复杂度内完成:设 \(f[i][j][k]\) 表示前 \(i\) 个点中取 \(j\) 个使得其和为 \(k\) 是否可能。则 \(f[i][j][k]=f[i-1][j][k]\oplus f[i-1][j-1][k-a_i]\) 。

同时背包的过程可用 bitset 优化,最终复杂度为 \(O(\frac{n^2\sum a_i}{w})\) 。

标签:Turtle,geq,sum,CF1239E,times,leq
From: https://www.cnblogs.com/zhouzizhe/p/16824334.html

相关文章

  • python学习记录10: turtle绘制简易动态时钟源码
     '''Function:  简易时钟'''importturtleimportdatetime'''悬空移动'''defmove(distance):  turtle.penup()  turtle.forward(distance)  t......
  • CF1239E Turtle
    CF1239ETurtle给定\(2\timesn\)的棋盘,要求重新安排布局,使得所有从\((1,1)\)走到\((2,n)\)的路径中最大点权和最小。\(n\leq25,a_i\leq5\times10^4\)。首先确......
  • 1.turtle库
    1.turtle库导入模块格式:import模块名as别名importturtleastturtle库函数1.turtle库函数名使用方式注意事项forward()或fd()turtle.fd(长度)直走back......