我复制了图片,样例什么的就不要在意了。
解题思路
也许有人很迷惑,这个样例怎么算出来的,至少都是上百啊,我身边是有人跟我这样说过的,确实,题目描述有一点问题。它说的是“每头奶牛都待在一个房间”,这句话是有歧义的。它没说是都在“一个房间”,还是均匀地在“每一个房间”。这道题呢,是均匀地在每一个房间,运用一下贪心,模拟什么的,绝对是可以弄出样例的。
其实,这道题的实际就是贪心,但这道题的思维量其实挺大的,究竟怎么样移动才能够花费最小呢?首先,一个很简单很简单的性质,每一个0,由它前面的最近的牛移动,如果多头牛,则选择移动最少的那头牛,这样肯定是最优的,不要问我怎么找到的。这可以说是没有问题的。可以说这就是我考试时的思路了,然而。。。你倒是算出来。。。模拟是真的复杂。
于是我们需要转换思路。其实我们找好一个起点。能将每一头牛排好序,移动就多好啊。是的,这样容易多了。不用讨论这么多,一下就可以算出答案。
关键就是找起点了。找起点的话最好就要让它这个位置奶牛数量为0或1,这样它是不会动了。而这个环就要顺时针向它来靠近。同时,移动后吧,我们需要留足够的空位给后面的牛,避免要重复移动,那么某一段中国房间数 - 奶牛数越大,这个起点其实越优,找到一个好的起点可以说是十分关键的,我们通过这样的一个起点,许多的贪心思路就可以做出来了