油漆工刷板问题The painter’s partition Problem(Python 实现)

问题描述:如果你有n块板,和K个油漆工人,求最短时间刷完所有板

前提:

一块板只能有一个工人刷

工人必须连号刷,不能跳跃板刷,比如5块板,可以1,2,3 刷,也可以3,4,5 刷,但是不能1,2,4刷

 

列如:

我有4块板,每块长1米,我有一个工人,每小时刷1米,那么最短时间刷完要4个小时(连着1,2,3,4);

我有4块板,每块长1米,我有二个工人,每人每小时刷1米,那么最短时间刷完要2个小时(工人甲刷1,2;工人乙刷3,4);

我有4块板,每块长1米,我有三个工人,每人每小时刷1米,那么最短时间刷完要2个小时(工人甲刷1;工人乙刷3;工人丙刷3,4;很明显,因为不能两人同时刷一块板也不能跳着刷,所以还是得花2个小时);

 

我有4块板,长度分别为1,2,3,4米,我有一个工人,每小时刷1米,那么最短时间刷完要10个小时(连着1,2,3,4);

我有4块板,长度分别为1,2,3,4米,我有二个工人,每人每小时刷1米,那么最短时间刷完要6个小时(工人甲刷1,2,3;工人乙刷4;瓶颈在工人甲这里,换来换去没有用,不能跳着刷也不能一起刷);

我有4块板,长度分别为1,2,3,4米,我有三个工人,每人每小时刷1米,那么最短时间刷完要4个小时(工人甲刷1,2;工人乙刷3;工人丙刷 4; 瓶颈在工人丙这里);

以此类推,假如我有n块板和k个工人,求最短时间刷完。

 

Python 3 实现:

print ("How Many Boards You Have and Their Sizes: ")
arr=[int(x) for x in input().split(',')]
print ("How Many Painters You Have: ")
k=int(input())
sort_arr=sorted(arr)
sum_arr=sum(arr)
n=len(arr)

def partition(arr,n,k):
    lo=int(sort_arr[-1])
    hi=int(sum_arr)

    while (lomaxLen:
            total =arr[i]
            numPainter+=1

    return numPainter

print ("Minimum Time: ",partition(arr,n,k))

 

原文链接:https://www.geeksforgeeks.org/painters-partition-problem-set-2/

 

原文只有C++和JAVA 实现,改成python更简洁

 

你可能感兴趣的:(油漆工刷板问题The painter’s partition Problem(Python 实现))