import math
def calculate_min_transport_rounds_optimized(vehicles, capacities, distances, total_stones, strategy='max_capacity'):
n = len(vehicles)
if strategy == 'max_capacity':
# 按承载能力降序排序
vehicles_capacities = sorted(zip(vehicles, capacities), key=lambda x: x[1], reverse=True)
elif strategy == 'longest_distance':
# 按距离降序排序
vehicles_distances = sorted(zip(vehicles, distances), key=lambda x: x[1], reverse=True)
min_rounds = 0
stones_left = total_stones
while stones_left > 0:
min_rounds += 1
if strategy == 'max_capacity':
# 每次尽可能多地运输石头
capacity_used = 0
for vehicle, capacity in vehicles_capacities:
if stones_left <= 0:
break
if capacity >= stones_left:
capacity_used = stones_left
stones_left = 0
else:
capacity_used += capacity
stones_left -= capacity
elif strategy == 'longest_distance':
# 优先运输距离较长的石头
for vehicle, distance in vehicles_distances:
if stones_left <= 0:
break
capacity = capacities[vehicles.index(vehicle)]
if capacity >= stones_left:
stones_left = 0
else:
stones_left -= capacity
return min_rounds
# 示例数据
vehicles = ["船", "马车", "外星飞船"]
capacities = [1000, 500, 2000] # 对应每辆车的承载能力
distances = [50, 20, 80] # 对应每块石头到达施工现场的距离
total_stones = 10000 # 假设需要运输的石头总数
# 计算最小运输次数(按每次尽可能多地运输石头策略)
min_rounds_max_capacity = calculate_min_transport_rounds_optimized(vehicles, capacities, distances, total_stones, strategy='max_capacity')
print(f"按每次尽可能多地运输石头策略,完成运输任务所需的最小运输次数为: {min_rounds_max_capacity}")
# 计算最小运输次数(按优先运输距离较长的石头策略)
min_rounds_longest_distance = calculate_min_transport_rounds_optimized(vehicles, capacities, distances, total_stones, strategy='longest_distance')
print(f"按优先运输距离较长的石头策略,完成运输任务所需的最小运输次数为: {min_rounds_longest_distance}")
问题一思路代码
问题1:建立数学模型,收集相关数据,以最大的赫夫金字塔为例 ,计算在给定的运输车辆数量和载重量下,完成石料运输任务所需的最小运输次数。