[USACO JAN] MooRoute S/G 题解

文章讨论了一只奶牛在0到N的数轴上移动的问题,其目标是最小化转向次数。奶牛从0出发,经过特定点后返回0。解决方案涉及到根据给定的数字序列a_i确定最优路径,使得转向次数最少。文章提到了一种O(T)复杂度的算法,并给出了一些示例来解释如何计算不同段间的合法方案数,最后通过乘法原理组合这些方案得出总方案数。
摘要由CSDN通过智能技术生成
Ag T3

在一个 0 0 0 N N N 的数轴上 , 有一只奶牛从 0 0 0 出发 ,左右移动 , 经过 T T T 秒回到 0 0 0 , 已知奶牛经过 0.5 , 1.5... ( N − 1 ) . 5 0.5 ,1.5...(N-1).5 0.5,1.5...(N1).5 的次数 , 输出最小转变方向数的一种方案 ( 其中 T = ∑ a i T=\sum a_i T=ai )

题目要求最小转向次数 , 因此我们尽量不转变方向

假设当前在 pos

若向右走 , 则能向右就继续向右 , 否则转向

若向左走 , 若 pos 前面的 a a a 值不等于 1 1 1 , 显然可以继续向左走
若 pos 前面的 a a a 值等于 1 1 1 , 那么分两种情况 :

在这里插入图片描述
case1 : pos 后面的 a a a 值都为 0 0 0 , 那么继续往左走
case2 : pos 后面的 a a a 值不为 0 0 0 , 那么转向向右走

复杂度 O ( T ) O(T) O(T)

code

Au T3

Ag T2 同背景 , 问满足最小转向数的方案数

例如 :

2
6 4

在这里插入图片描述

那么在 0 0 0 1 1 1 段应该经过了 3 3 3 组来回 , 在 1 1 1 2 2 2 段应该经过了 2 2 2 组来回, 那么在 01 01 01 段中选 2 2 2 组衔接上上 12 12 12 段中的来回均为合法方案 , 因此答案为 C 3 2 C_3^2 C32

而对于 :

2
4 6

在这里插入图片描述

考虑到最小转向次数 , 初末两次来回一定经过 0 0 0 2 2 2 整段 , 因此图中红色部分必选 , 剩下的可任意衔接即可 , 因此答案为 C 3 − 1 2 − 1 = C 2 1 = 2 C_{3-1}^{2-1}=C_2^1=2 C3121=C21=2

这样我们就得到了任意相邻两段之间的方案数 :

( 先将 a [ i ] a[i] a[i] 除以 2 2 2 表示来回数 )

{ C a [ i ] a [ i + 1 ] a [ i ] ≥ a [ i + 1 ] C a [ i − 1 ] a [ i + 1 ] − 1 a [ i ] < a [ i + 1 ] \begin{cases} C_{a[i]}^{a[i+1]} & a[i]\ge a[i+1]\\ \\ C_{a[i-1]}^{a[i+1]-1} & a[i]<a[i+1] \end{cases} Ca[i]a[i+1]Ca[i1]a[i+1]1a[i]a[i+1]a[i]<a[i+1]

最终乘法原理相乘即可

code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值