样例输入
6 3
1 2 3 4 5 6
样例输出
2
解题思路
- 在序列中选取一个位置将序列分成两段,要求每一段中偶数和奇数的数
- 量都相等尽可能多地进行这个操作,但每次操作都需要花费代价
- 切割需要花费的代价为切割两端的元素的差的绝对值
- 在他的预算范围内,最多能进行多少次操作。
通过计算每一种可能的切割的消耗,并把它们列表,按照升序排列,然后用零花钱总数去减,使能减更多次。
代码
n,B=map(int,input().split())
a=list(map(int,input().split()))
#记录奇数和偶数的数量差
cnt = 0
#记录相邻两个数之差的绝对值
cost = []
#求出序列里奇数个数=偶数的所有可能切法并求消耗
for i in range(0,n-1):if a[i] % 2 ==0:cnt += 1else:cnt -= 1# 保证序列里奇数个数=偶数if cnt == 0:cost.append(abs(a[i]-a[i+1]))
#把差的绝对值排序,让B从小减到大以求最多操作次数
cost.sort()
res = 0
for i in cost:
#B从小减到大,减到余额不足时跳出 if B >= i:res += 1B -= ielse:breakprint(res)