贪心算法(贪婪)python

本文介绍了使用Python实现的贪心算法解决多个问题,包括最大值求和、平均数调整、有序列表合并、数组降序排序、最优化分配和数字组合优化等实例。

Problem A

n=input().split()
ans=0
for _ in range(int(n[0])):
    ans+=max(int(x) for x in input().split())
print(ans)

Problem B

n=int(input())
ns=[int(x) for x in input().split()]
avg=sum(ns)//n
ans=0
for x in range(n-1):
    c=avg-ns[x]
    if c:
        ns[x+1]-=c
        ans+=1
print(ans)

Problem  C

n=int(input())
s=[]
for _ in range(n):
    s.append([int(x) for x in input().split()])
s.sort(key=lambda x:x[1])
ans,end=0,0
for x in s:
    if x[0]>=end:
        ans+=1
        end=x[1]
print(ans)

Problem  D

n=list(input())
s=int(input())
for _ in range(s):
    for i in range(len(n)-1):
        if n[i]>n[i+1]:
          &

### Python实现贪心算法 #### 示例代码:活动选择问题 以下是一个经典的贪心算法实例——活动选择问题的Python实现: ```python def activity_selection(activities): activities = sorted(activities, key=lambda x: x[1]) # 按结束时间排序[^2] selected_activities = [] last_end_time = 0 for start, end in activities: if start >= last_end_time: # 当前活动不与已选活动冲突 selected_activities.append((start, end)) last_end_time = end return selected_activities # 测试数据 activities = [(1, 4), (3, 5), (0, 6), (5, 7), (3, 9), (5, 9), (6, 10), (8, 11), (8, 12), (2, 14), (12, 16)] result = activity_selection(activities) print("Selected Activities:", result) ``` 此代码通过按活动结束时间排序并依次选取无冲突的活动来获得最大数量的可执行活动。 --- #### 示例代码:背包问题 另一个常见的贪心算法应用场景是背包问题。以下是基于单位价值密度(即物品的价值除以其重量)进行排序的实现方式: ```python def knapsack_greedy(capacity, items): items = sorted(items, key=lambda x: x[1] / x[0], reverse=True) # 按单位价值降序排列[^4] total_value = 0 knapsack = [] for weight, value in items: if capacity >= weight: # 如果剩余容量可以容纳整个物品 knapsack.append((weight, value)) # 将该物品加入背包 capacity -= weight # 更新剩余容量 total_value += value # 更新总价值 else: fraction = capacity / weight # 计算能放入的部分比例 knapsack.append((fraction * weight, fraction * value)) # 加入部分物品 total_value += fraction * value # 更新总价值 break # 背包已满,退出循环 return knapsack, total_value # 测试数据 items = [(10, 60), (20, 100), (30, 120)] # 格式为 (重量, 价值) capacity = 50 knapsack, total_value = knapsack_greedy(capacity, items) print("Knapsack Contents:", knapsack) print("Total Value:", total_value) ``` 上述代码展示了如何利用贪心策略最大化背包中的总价值。 --- #### 示例解释 1. **活动选择问题** - 输入是一组活动的时间区间[(s₁,e₁),(s₂,e₂)...,(sn,en)]。 - 输出是在这些活动中选出尽可能多的互不重叠的子集。 - 关键在于每次优先选择最早结束的活动,从而留出更多时间给后续活动。 2. **背包问题** - 输入是若干物品以及它们对应的重量和价值,还有一个固定大小的背包容量。 - 输出是如何挑选物品使得背包内的总价值最高。 - 使用贪心策略时,按照单位价值密度对物品排序,并逐步填充直到无法再加为止。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值