USACO 2015 US OPEN CONTEST,Gold Division Solution

本文解析了两道算法题目,一是通过动态规划求解回文路径数量的问题,讨论了状态定义与转移的方式;二是利用贪心策略解决草垛放置问题,介绍了按质量排序后逐步放置的策略及其实现细节。

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

Googol

简单的交互题,就是需要高精除极为麻烦,略过。

Palindromic Paths

比较好的dp题。
首先我们可以枚举回文串的长度。枚举一个a,则回文串长度为2a-1
显然从中间那条斜线开始。
然后我们可以观察到,对于一个a,字符串的最后的字符位于一条斜线上。
也就是说,在特定的a下,对于字符串最后一个字母c,在知道其横坐标x的情况下,是可以算出其纵坐标y的。
那么我们可以定义状态dp[a][x1][x2]表示在a的情况下,左边端点的横坐标为x1,右边端点的横坐标为x2,满足条件的回文串的个数。
然后把a那个维度给滚掉。
经过简单的转移即可求得答案。
时间复杂度O(n3),空间复杂度O(n2),略微卡一下常数即可。

Trapped in the Haybales

高调表示这是自己写过的最牛逼的贪心。
首先这题的切入点是草垛的质量。
我们按照质量排序,然后依次把草垛放到直线上。
每次加入一个草垛(位置为p),看看它左边的草垛(如果有的话)l,以及右边的草垛(如果有的话)r
如果lr已经是可以不可以自由的,那么就不插入这个草垛。
else
观察如果哪边可以撞翻当前该草垛,那么把[l,p]或者[p,r]加入答案。
因为草垛的质量是从大到小排序的,那么lr的质量要不是没影响,要不是已经算过了。
关于怎么维护,用一个set存位置,用一个map标记即可。

相信绝大多数同学卡在按照位置排序然后预处理啊并查集啊一起乱搞啥都没搞出来上了==

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值