编辑代码

def greedy_bean_knapsack(capacity, beans):
    # 计算豆子的单位价值
    for bean in beans:
        bean['value_per_weight'] = bean['value'] / bean['weight']

    # 按单位价值降序排序豆子
    sorted_beans = sorted(beans, key=lambda x: x['value_per_weight'], reverse=True)

    total_value = 0
    selected_beans = []

    for bean in sorted_beans:
        if capacity >= bean['weight']:
            # 将豆子放入背包
            capacity -= bean['weight']
            total_value += bean['value']
            selected_beans.append(bean)

    return total_value, selected_beans

# 示例数据
capacity = 100
beans = [
    {'name': 'Bean1', 'weight': 30, 'value': 60},
    {'name': 'Bean2', 'weight': 20, 'value': 100},
    {'name': 'Bean3', 'weight': 50, 'value': 120},
    {'name': 'Bean4', 'weight': 10, 'value': 40},
    {'name': 'Bean5', 'weight': 40, 'value': 150}
]

# 贪心法求解
max_value, selected_beans = greedy_bean_knapsack(capacity, beans)

# 输出结果
print(f"最大总价值: {max_value}")
print("选中的豆子:")
for bean in selected_beans:
    print(f"{bean['name']} - 重量: {bean['weight']}kg, 价值: {bean['value']}")