题目
一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务。n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间。
输入描述
输入包括两行:
第一行为整数n(1 ≤ n ≤ 50)
第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数。
输出描述
输出一个整数,表示最少需要处理的时间
输入例子
5
3072 3072 7168 3072 1024
输出例子
9216
思考
首先得理解题意,1s单核可以处理1kb,length数组里面的存放的是一个个长度为1024倍数单位为kb的值,求设计方案,让cpu处理这批任务所需时间最短,就是给一个任务分配的顺序以及给cpu core A还是cpu core B。
稍微想一想,我想到了这个东东
是不是很像!
只不过是两行的俄罗斯方块,尽可能让他的高度最短~~~
那么这样就好做了,方案如下
先将数组倒序排序
再按顺序分别填入cpu core A(以下用a代替) 和 cpu core B(以下用b代替),每填一个,就判断一下,a的长度和b的长度谁长,判断之后,下一个任务填入短的那个cpu core,就这么下去,最后再判断一下左右两个cpu core,选长的一个作为最终的结果。
解决方案
TALK IS CHEAP,SHOW ME THE CODE!
最近在学python,机子上没有装c环境,偷个懒,便用python写了
最后上个结果图