USACO 2019 February Contest Platinum T3: Mowing Mischief

本文探讨了在限定条件下的农场割草问题,通过动态规划和树状数组优化路径选择,以最小化割草面积。关键在于合理规划路径,确保经过特定点集,实现效率最大化。

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

题目大意

Bessie的表妹Ella和Bella正在参观农场。不幸的是,自从他们到达以来,他们一直在恶作剧。

在他们的最新计划中,他们决定尽可能多地割草。农场的草地是 T×T 的正方形。左下角是 (0,0) ,右上角是 (T,T) 。因此,正方形包含 (T+1)2 个格点(具有整数坐标的点)。

Ella和Bella计划从 (0,0) 开始并以每秒一个单位长度的速度运行到 (T,T) ,同时每只奶牛都握住非常锋利且非常有弹性的线的一端。任何被这根电线扫过的区域的草都会被切断。Ella和Bella可能采取不同的路径,但她们只会向上或者向右移动,从一个格点移动到另一个格点。

Bessie非常担心会切割太多的草,所以她发明了一个聪明的计划来限制Ella和Bella的路径。在整个草原上散布着 种花(1N2e5),每种花都在一个特定的格点上。 Bessie将从这些花中挑选一个子集 S , S 集合中的花Ella和Bella都需要经过(Ella和Bella的路径都必须经过 S 中的所有花朵)。

Ella和Bella将会切割面积尽可能大的草,请帮助Bessie确定集合 SS 使得在 SS集合尽可能大的情况下被切割的草的面积最小。

题目分析

经过思考,我们发现骑士拉着线扫对Ella和Bella来说最优的情况就是划出一个矩形。

所以,问题变成了在 N 个点中选择某些点,排序后一一构成矩形(相邻的点),求构成的这些矩形的最小面积和。

 

将所有点按照其横坐标为第一关键字,纵坐标为第二关键字排序,靠前的点无法转移到靠后的点。用树状数组进行动态规划,我们可以得到以每个点为结尾的选取序列的最优长度。(相当于求以每个点结尾的LIS)并根据LIS的大小对点进行分层。

可以得出属于同一层的点横坐标递增,纵坐标递减。

 

接下来,我们只需要考虑层与层之间的转移。(本层点的LIS一定是由上一层点的LIS转移过来的)

转移方程如下:

 

dpi​ =Minj (j为上一层点 且 xjxiyjyi​ {dpj (xixj∗ (yiyj

把后一项拆开,得:

dpi​ =Minj (j为上一层点 且 xjxiyjyi​ {dpj xjyj​ − xiy

转载于:https://www.cnblogs.com/LI-dox/p/11227904.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值