zoj2196
給一個長度為n(n <= 10^5)的“01”串,你可以任意交換一個為0的位和一個為1的位,若這兩位相鄰,花費為X,否則花費為Y。求通過若干次交換后將串中的“1”全部變換到“0”前面的最小花費。
Input
第一行一個整數(shù)T(1 <= T <= 10),表示測試數(shù)據(jù)的組數(shù)。接下來3*T行,每組數(shù)據(jù)三行,第一行為整數(shù)X(1 <= X <= 10^3),第二行為整數(shù)Y(X <= Y <= 10^3),第三行是“01”串。
Output
最小花費。
Sample Input
2
1
2
1100
1
2
0011
Sample Output
0
3
思路:如果我們按照一步一步挪動的走法來做的話,無論怎么挪動,無論你先挪哪個后挪哪個,挪動的步數(shù)都是一樣的。但是這里我們有兩種挪動的方法,一種是跳著挪動,一種是相鄰的挪動,無非二選一,而且無非一種比另一種合適(當(dāng)然也可能相同消耗)。那么我們貪心的點就應(yīng)該鎖定在挪動步數(shù)上邊,從樣例2我們就能看出來:
0011
我們盡量用第一個0和最后一個1交換,我們這樣就能保證靠近中間的0和1相近,也就是更近。
AC代碼:
總結(jié)
- 上一篇: So Hard
- 下一篇: 对广义表L=((a,b),c,d)进行操