CSP-S 十一集训Day2

贪心 

GDOI 2018 

给定长度为n的a序列  a 的范围是[0,m-1] 然后每次可以选择一个区间+1, -1 然后 求 将所有的数字 在模m意义 下 变成那个0 所需要的最少次 

这个题目 就是添加了取模意义下的最小次数。 不妨先思考一下。

然后考虑 不模 m的情况 这就是一道非常经典的问题 比如校oj的那道例题 数列差分问题 而这个题目要求我们 最后把所有的数字变成 0

然后我们考虑 对原序列进行差分 求出b序列 从第1项到第n项 我们只需要求出来 所有正数和p 和负数和q 那么最后的答案就是 max(p,,-q)

那么在取模意义下 我们不仅可以变成0 还可以把所有数字 变成m 所有现在考虑 将那些数字 变成0 哪些数字变成m 会使得整个序列修改次数最少

然后 显然 我们可以猜到一个贪心 就是对于 小的数字 肯定是尽量满足 变成0 较大的数字尽量变成m 所以我们 不妨 将b序列 进行从小到达排序

考虑找到一个位置 x st$b_1,b_2....b_x$ 全部调整为0 然后对于[x+1,n]的部分 变成 m 我们贪心的在做这个事情 会发现 这样寻找到的就是最小次数

也就是求$max(\sum_{i=1}^{x} b_i,\sum_{i=x+1}^{n} m-b_i)$ 最小 

取数游戏 :给出n个正整数 需要把他们连在一排 组成一个最大的多位整数:

看到这题目样例 我们总是会猜出很多 假的贪心 所以这个时候 我们不妨考虑 两个数字a b

我们是能够比较出来 a放在b之前大 还是 b放在a之前最大 每两个数字 进行比较 我们就能 得到每个数字的相对大小

 

猜你喜欢

转载自www.cnblogs.com/Tyouchie/p/11616839.html
今日推荐