题解 | #牛舍安排问题#

牛舍安排问题

https://www.nowcoder.com/practice/b56eb97b8b5941d3a14cd4ce7238f502

#coding:utf-8
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param houses int整型一维数组 
# @param k int整型 
# @return int整型
#
class Solution:
    def minTotalDistance(self, houses, k):
        houses.sort()  # Sort the houses' positions
        
        n = len(houses)
        dp = [[float('inf')] * (n + 1) for _ in range(k + 1)]
        dp[0][0] = 0
        
        for i in range(1, n + 1):
            dp[1][i] = self.calculateTotalDistance(houses, 0, i - 1)
        
        for i in range(2, k + 1):
            for j in range(i, n + 1):
                for m in range(i - 1, j):
                    dp[i][j] = min(dp[i][j], dp[i - 1][m] + self.calculateTotalDistance(houses, m, j - 1))
        
        return dp[k][n]

    def calculateTotalDistance(self, houses, start, end):
        median = houses[(start + end) // 2]
        total_distance = 0
        for i in range(start, end + 1):
            total_distance += abs(houses[i] - median)
        return total_distance

全部评论

相关推荐

但我还是会继续秋招的
投递京东等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务