问题 4827 --挪位置

4827: 挪位置★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 26  解决: 11
[提交][状态][命题人:]

题目描述

有n把扶手椅,从左到右编号为1到n。 有些扶手椅被人占用(每个扶手椅最多一个人),其他的则没有。 已占用扶手椅数不大于n/2。   

出于某些原因,你想让人们从他们的扶手椅移到其他的椅子上。 如果第i个扶手椅被某人占用而第j个扶手椅没有被占用,您可以告诉坐在第i个扶手椅上的人移到第j个扶手椅上。 一个人从第i个扶手椅移动到第j个扶手椅所需要的时间是|i−j|分钟。 您可以执行这个操作任意次数,但这些操作必须顺序执行,即: 在上一个操作中,您要求移动的人已经移动到他们的目标扶手椅上,否则您不能告诉此人移动。  

    你想要实现以下情况:每个最初被占用的座位必须是空闲的。 你需要做这件事的最少时间是多少? 

输入

第一行包含一个整数n(2≤n≤5000)—扶手椅的数量。 

第二行包含n个整数a1,a2,…,an(0≤ai≤1)。 ai =1表示第i个扶手椅最初被占用,ai =0表示它最初没有被占用。 占用扶手椅的数量最多为n/2。

例如:输入如下:

样例1:

7  
1 0 0 1 0 0 1 
样例2:
6  
1 1 1 0 0  0
样例3:

0  0  0  0  0 

输出

一个整数,你必须花最少的时间达到以下情况:最初被占用的座位必须都是空的。

样例1的输出:

3

样例2的输出:

9

样例3的输出:

0

样例输入
Copy
7  
1 0 0 1 0 0 1
样例输出
Copy
3

提示

请注意: 

在第一个测试中,您可以执行以下顺序:   

让一个人从扶手椅1移动到扶手椅2,需要1分钟;  

让一个人从扶手椅7移到扶手椅6,需要1分钟;  

让一个人从扶手椅4移动到扶手椅5,需要1分钟。  

在第二次测试中,可以执行如下顺序:   

让一个人从扶手椅1移到扶手椅4,需要3分钟;  

让一个人从扶手椅2移到扶手椅6,需要4分钟;  

让一个人从扶手椅4移动到扶手椅5,需要1分钟;  

让一个人从扶手椅3移动到扶手椅4,需要1分钟。  

在第三个测试中,没有座位被占用,所以你的目标立即实现。

来源

[提交][状态]