***Painter's Partition Problem

Similar to Allocate Books

Problem Link: https://www.interviewbit.com/old/problems/painters-partition-problem/

class Solution:
    # @param A : integer
    # @param B : integer
    # @param C : list of integers
    # @return an integer
    def paint(self, painters, time, boards):
        
        def partition(boards,maxBoards,painters):
            boardCount=0
            painter=1
            for i in range(len(boards)):
                if(boards[i]>maxBoards):
                    return False
                if(boardCount+boards[i]>maxBoards):
                    painter+=1
                    if(painter>painters):
                        return False
                    boardCount=boards[i]
                else:
                    boardCount+=boards[i]
            return True
            
        def bsearch(boards,l,h,painters):
            if(l<=h):
                mid=(l+h)//2
                if(partition(boards,mid,painters)==True):
                    self.ans=min(self.ans,mid)
                    bsearch(boards,l,mid-1,painters)
                else:
                    bsearch(boards,mid+1,h,painters)
            return self.ans
    
        n=len(boards)
        # if(painters>n):
        #     return -1
        l=max(boards)
        h=sum(boards)
        self.ans=float('inf')
        self.ans=bsearch(boards,l,h,painters)
        return (time*self.ans)%10000003

Last updated