网易双核编程,python
2017-04-24 19:03
232 查看
题目:
一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务。n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间。
输入描述:
输入包括两行:
第一行为整数n(1 ≤ n ≤ 50)
第二行为n个整数length[i](1024 ≤ length[i] ≤ 4194304),表示每个任务的长度为length[i]kb,每个数均为1024的倍数。
输出描述:
输出一个整数,表示最少需要处理的时间
输入例子:
5
3072 3072 7168 3072 1024
输出例子:
9216
刚开始做的时候方向偏了,查了之后发现其实是一到背包问题。
关于背包问题,百度解释的很清楚
这边记录一下这道题的结题思路。
1.问题里说明是双核,也就是两个内核同时工作,如果想要时间最少,那么最好把5个需要处理数的“平均”分成两份。
首先根据例子可以知道,数量为n,背包能承受重量为(1+3+3+3+7)/2=9
2. 这样我们可以画一个矩阵。列为10,行为6(为什么是9+1,和5+1下面会解释)
解释一下这个表(不管weight和value列,这两个列只是为了方便计算)
[i][j]表示的就是背包在j的承重能力下,放i个数据的最大总和。
根据背包问题原理可知
[i][j]= max ([ i-1 ][ j ] ; [ i-1 ][ j-w[i] ]+v[i]])
原理:(这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值为f[i-1][v];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-w[i]的背包中”,此时能获得的最大价值就是f [i-1][v-w[i]]再加上通过放入第i件物品获得的价值v[i]。)
3 可以写出代码(完整版):
def shuanghe(n,w):
sum = 0
for i in range(len(w)):
sum = sum +int(w[i])
W = int(sum/2+1)
res = [[0 for j in range(W+1)] for i in range(n+1)]
for j in range(1,W+1):
res[0][j]=0
for i in range(1,n+1):
for j in range(1,W+1):
res[i][j]=res[i-1][j]
if j >= int(w[i-1]) and res[i][j] < res[i-1][j - w[i-1]]+w[i-1]:
res[i][j] = res[i-1][j - w[i-1]]+w[i-1]
final1 = res
[W]
final2 = sum - final1
final = max(final1,final2)
return final
w = []
n = int(input())
if n<0 or n>50:
print("1-50")
wstr = raw_input()
w1 = wstr.split(' ')#满足输入需求
w = []
for i in range(n):
a = int(w1[i])#输入的是字符串形式,我需要Int类型
w.append(a)
print shuanghe(n,w)
一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务。n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间。
输入描述:
输入包括两行:
第一行为整数n(1 ≤ n ≤ 50)
第二行为n个整数length[i](1024 ≤ length[i] ≤ 4194304),表示每个任务的长度为length[i]kb,每个数均为1024的倍数。
输出描述:
输出一个整数,表示最少需要处理的时间
输入例子:
5
3072 3072 7168 3072 1024
输出例子:
9216
刚开始做的时候方向偏了,查了之后发现其实是一到背包问题。
关于背包问题,百度解释的很清楚
这边记录一下这道题的结题思路。
1.问题里说明是双核,也就是两个内核同时工作,如果想要时间最少,那么最好把5个需要处理数的“平均”分成两份。
首先根据例子可以知道,数量为n,背包能承受重量为(1+3+3+3+7)/2=9
2. 这样我们可以画一个矩阵。列为10,行为6(为什么是9+1,和5+1下面会解释)
i\j | weight | value | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
5 | 1 | 1 | 0 | 1 | 1 | 3 | 4 | 4 | 6 | 7 | 8 | 9 |
4 | 3 | 3 | 0 | 0 | 0 | 3 | 3 | 3 | 6 | 7 | 7 | 9 |
3 | 3 | 3 | 0 | 0 | 0 | 3 | 3 | 3 | 6 | 7 | 7 | 7 |
2 | 3 | 3 | 0 | 0 | 0 | 3 | 3 | 3 | 3 | 7 | 7 | 7 |
1 | 7 | 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 7 | 7 | 7 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
[i][j]表示的就是背包在j的承重能力下,放i个数据的最大总和。
根据背包问题原理可知
[i][j]= max ([ i-1 ][ j ] ; [ i-1 ][ j-w[i] ]+v[i]])
原理:(这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值为f[i-1][v];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-w[i]的背包中”,此时能获得的最大价值就是f [i-1][v-w[i]]再加上通过放入第i件物品获得的价值v[i]。)
3 可以写出代码(完整版):
def shuanghe(n,w):
sum = 0
for i in range(len(w)):
sum = sum +int(w[i])
W = int(sum/2+1)
res = [[0 for j in range(W+1)] for i in range(n+1)]
for j in range(1,W+1):
res[0][j]=0
for i in range(1,n+1):
for j in range(1,W+1):
res[i][j]=res[i-1][j]
if j >= int(w[i-1]) and res[i][j] < res[i-1][j - w[i-1]]+w[i-1]:
res[i][j] = res[i-1][j - w[i-1]]+w[i-1]
final1 = res
[W]
final2 = sum - final1
final = max(final1,final2)
return final
w = []
n = int(input())
if n<0 or n>50:
print("1-50")
wstr = raw_input()
w1 = wstr.split(' ')#满足输入需求
w = []
for i in range(n):
a = int(w1[i])#输入的是字符串形式,我需要Int类型
w.append(a)
print shuanghe(n,w)
相关文章推荐
- 网易2017春招编程题:奇怪的表达式求值 [python]
- 网易2017春招编程题:调整队形 [python]
- 网易2018校招内推编程题(Python描述)
- 网易2017春招编程题:集合 [python]
- 网易2018校招内推编程题集合:等差数列 [python]
- 网易2018校招内推编程题集合:小易喜欢的数列 [python]
- 网易2017春招编程题:工作安排 [python]
- 网易2018校招内推编程题集合:堆棋子 [python]
- 网易2018校招内推编程题集合:独立的小易 [python]
- 网易微专业麻瓜编程Python Web开发工程师教程|价值1598元
- 网易2017春招编程题:双核处理 [python]
- 网易2017秋招编程题:数字翻转 [python]
- 网易2018校招内推编程题集合:交错01串 [python]
- 网易2018校招内推编程题集合:疯狂队列 [python]
- Python中的元类编程
- Linux编程之序列化存储Python对象 ZT
- python代码(2)---google中国编程挑战赛入围赛真题HardDuplicateRemover(1000分)
- Python 与 C++ 的交互编程
- 在c中内嵌python编程
- 探索 Python,第 6 部分: 用 Python 编程