(Python)贪心歌手

华为 OD 机试:贪心歌手
题目描述
歌手准备从 A城去 B 城参加演出
1)按照合同,他必须在T天内赶到。
2)歌手途径 N 座城市。
3)歌手不能往回走。
4)每两座城市之间需要的天数都可以提前获知。
5)歌手在每座城市都可以在路边卖唱赚钱。经过调研,歌手提前获知了每座城市卖唱的收入预期如果在一座城市第一天卖唱可以赚 M,后续每天的收入会减少 D(第二天赚的钱是 M-D,第三天是 M-2....)。如果收入减到 0就不会再少了。
6)歌手到达后的第二天才能开始卖唱。如果今天卖过唱,第二天才能出发。
贪心的歌手最多可以赚多少钱?
输入描述
第一行两个数字T和 N,中间用空格隔开,T 代表总天数;N 代表路上经过 N 座城市;
0<T<1000,0<N<100
第二行 N+1 个数字,中间用空格隔开,代表每两座城市之间耗费的时间,其总和<=T。
接下来 N 行,每行两个数字 M 和 D,中间用空格隔开。
代表每个城市的收入预期。
0<M<1000,0<D<100
输出描述
一个数字。代表歌手最多可以赚多少钱。以回车结束

示例一
输入
10 2
1 1 2
120 20
90 10
输出
540
说明
总共 10 天,路上经过 2 座城市。
路上共花 1+1+2=4 天。
剩余6天最好的计划是在第一座城市待 3天,在第二座城市待3天在第一座城市赚的钱:120+100+80=300
在第二座城市赚的钱:90+80+70=240
共 300 +240=540

示例二
输入
10 3
1 1 2 3
120 20
90 10
100 20
输出
320


def main():
    T, N = map(int, input().split())
    cost_days = sum(map(int, input().split()))
    rest_days = T - cost_days
    cities = []
    for _ in range(N):
        income, decrease = map(int, input().split())
        cities.append([income, decrease])
 
    total_income = 0
    for _ in range(rest_days):
        cities.sort(reverse=True)
        if cities[0][0] > 0:
            total_income += cities[0][0]
            cities[0][0] -= cities[0][1]
 
    print(total_income)
 
if __name__ == "__main__":
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值