Untitled

 avatar
unknown
plain_text
a year ago
1.1 kB
6
Indexable
def get_minimum_cost(machine_count, final_machine_count, shifting_cost):
    
    n = len(machine_count)
    dp = [[-1 for _ in range(1001)] for _ in range(1001)]

    def solve(i, target):
       
        if dp[i][sum(target)] != -1:
            return dp[i][sum(target)]

        if all(t == 0 for t in target):
            return 0

        min_cost = float('inf')
        
        for j in range(n):
            if i == j: 
                continue

            move_cost = (machine_count[i] - target[i]) * shifting_cost
            remaining_target = target.copy()
            remaining_target[j] += machine_count[i] - target[i]

            recursive_cost = solve(i + 1, remaining_target)
            min_cost = min(min_cost, move_cost + recursive_cost)

        dp[i][sum(target)] = min_cost

        return min_cost

    return solve(0, final_machine_count.copy())

machine_count = [2, 3, 5, 7]
final_machine_count = [5, 10, 5]
shifting_cost = 2

minimum_cost = get_minimum_cost(machine_count, final_machine_count, shifting_cost)
print(minimum_cost)
Editor is loading...
Leave a Comment