贪心——蓝桥杯备赛【python】

一、蓝桥大学的小B同学宿舍

问题描述

输入描述
输入数据有 T 组测试例,在第一行给出测试例个数 T。
每个测试例的第一行是一个整数 N(1<N < 200),表示要搬运行李的人数。接下来 N 行,每行两个正整数s和t,表示一个人,将行李是从房间号码 s移到到房间号码t。

输出描述
每组输入都有一行输出数据,为一整数T,表示完成任务所花费的最小时间。

输入示例

3
4
10 20
30 40
50 60
70 80
2
1 3
2 200
3
10 100
20 80
30 50

输出示例

10
20
30

问题分析

我们要知道一个点如果在i个区间中,那么就代表有i个学生要搬行李经过该点,且任意两个同学不能同时搬。我们现在统计每个点上经过的同学的数量,然后找到数量最多的那个点,输出他的次数即可。


代码示例(看看就好)

T=int(input())
for i in range(T):
    ls=[0 for i in range(401)]
    n=int(input())
    for j in range(n):
        s,t=map(int,input().split())
        if t<s:
            s,t=t,s
        for k in range(s,t+1):
            ls[k]+=1
    print(max(ls)*10)

二、贪心的自助餐

问题描述

输入描述
第一行输入两个整数n,C(0≤n≤10000,0≤C≤10000),其中 n 为菜品数量,C为小B的肚子容量。接下来 n 行每行输入两个数 v[i],w[i]。v[i] 是第 i 个菜品的价值,w[i] 表示第 i 个菜品的重量(0≤v[i],w[i]≤10000)。

输出描述
输出一行数据,表示最大的价值,保留小数点后三位数。

输入示例

20 1000
1 22
2 43
123 214
12 2
123 432
21 223
22 16
77 49
34 78
34 9
43 677
21 34
23 23
12 56
332 56
21 99
123 545
389 33
12 999
23 88

输出示例

1204.114

问题分析

【贪心算法】按单价(value/weight)排个序,然后就挑单价最高的开始吃,要能一个菜全吃完的就直接给他吃完,若这个菜吃不完,就把剩余的胃都吃他,然后break就行了


代码示例

n,c=map(int,input().split())
ls=[]
value=0
for i in range(n):
    v,w=map(int,input().split())
    av=v/w
    ls.append((v,w,av))
ls=sorted(ls,key=lambda x:x[2],reverse=True)
for i in range(n):
    if ls[i][1]<=c:
        value+=ls[i][0]
        c-=ls[i][1]
    else:
        value+=c*ls[i][2]
        break
print("%.3f"%value)
    

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值