摘要:
给定N组数字,要求对当前给定的一串数字进行一次错排,在这些错排中有一组最大值,求这组最大值的最小的错排方式。一般的写法是左边的序列从小到大进行排序,右边从大到小进行排序,然后进行组合,这样的一组排列时最优的排列。因为任意交换这样一个序列的元素相对位置必定会使得配对值不平均。但是如果简简单单是这样来做的话肯定是会超时的,我们就注意到左边和右边的值是1-100之间的值,因此我们用一个数组来记录1-100的个数即可,这样就不用每次来排序并且一一计算了。代码如下:#include <iostream>#include <cstdio>#include <cstdlib&g 阅读全文
摘要:
该题建立一个一维的坐标,给定N,M分别表示有N个接收器,M个房子(坐标分别是1,2,3...M),每个接收器能够接受来自左边和右边的一个通话,下面跟着N行,分别表示每个接收器的属性,两个参数,首先是这个接收器的位置,给定为a的话,那么其位置就是位于a和a+1之间,第二个参数就是来自左右有多少个通话。我们定义一个贪心规则即是:只考虑到左边发射出去的线,对于每个接收器(a, b)就把问题转化为在坐标小于等于a的地方有b条线段存在,如果左边剩下的线段条数没有b条的话,那么增加至b条,否则则属于线段过多,应该马上连接x-b条线段,这样多出来的线段就不会穿越这个位置的接收器了。代码如下:#include 阅读全文