(每日一练65890)题目名称:运输石油

文盲老顾
新星创作者: 信息安全技术领域
领域专家: 数据库技术领域
2023-05-31 11:07:59

某石油公司需要向A、B两地运输石油。两地的需求量不同,而一辆车只能装载一定量的石油。经过计算A地需要a辆车,B地需要b辆车运输才能满足需求。现在一共有n辆车分布在各地,每辆车前往A、B两地运输石油均可以获得一定不等的利润。 现在请你安排a辆车前往A地,b辆车前往B地运输石油,使得在满足A、B两地石油需求的前提下,获得最大的利润。每辆车只能前往一地运输石油。

其他小伙伴有 dfs 做法,有背包做法,老顾就是不相信,除了这些没其他做法,就一直和自己较劲。

从碰到这个题目,这已经是第四次做了,一点一点完善老顾自己的排序做法,总算弄出来了。之后再碰到这个题目,就换做法。

https://blog.csdn.net/superwfei/article/details/129236799?spm=1001.2014.3001.5502 周赛32期

https://blog.csdn.net/superwfei/article/details/130320115?spm=1001.2014.3001.5502 周赛48期

n,a,b = map(int,input().split())
arr,ans = [list(map(int,input().split())) + [0] for _ in range(n)],0
inp = '{},{},{},{}'.format(n,a,b,arr[:10])
arr.sort(key = lambda x:(-(x[0] - x[1]),-x[0]))
for i in range(a):
    arr[i][2] = 1
arr.sort(key = lambda x:(-(x[1] - x[0]),x[0]))
for i in range(b):
    arr[i][2] = -1
if a + b == n:
    ans = sum([v[0] for v in arr if v[2]==1]) + sum([v[1] for v in arr if v[2]==-1])
else:
    arr.sort(key = lambda x:-max(x[0],x[1]))
    c,t = 0,[]
    while a > 0 or b > 0:
        v = arr[c]
        if v[2] == 1 and a > 0:
            a -= 1
            ans += v[0]
        elif v[2] == -1 and b > 0:
            b -= 1
            ans += v[1]
        else:
            t.append(v)
        if len(t) == a + b and a + b > 0:
            t.sort(key = lambda x:(-(x[0] - x[1]),-x[0]))
            for i in range(a):
                ans += t[0][0]
                t.pop(0)
            t.sort(key = lambda x:-x[1])
            for i in range(b):
                ans += t[0][1]
                t.pop(0)
            a = b = 0
        c += 1
print(ans)
...全文
324 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
文盲老顾 2023-05-31
  • 打赏
  • 举报
回复

https://www.nowcoder.com/questionTerminal/f230e7bbe8ee47e4b98517e66141acdc

牛客网,一模一样的题目,没能 ac ,表示算法有问题,回头再研究。

源码直接下载地址: https://pan.quark.cn/s/854bd57df23a 在金融行业中,房产购置贷款是众多人在购置不动产时必须进行的一项财务规划。Matlab作为一种功能强大的数学及数据分析平台,经常被应用于各类复杂的运算,其中包括住房贷款的计算。本文将详细研究运用Matlab开发住房贷款计算程序的相关知识要点,以协助读者掌握如何借助编程技术处理实际的信贷问题。 1. **信贷种类** - **商业信贷**:此类贷款通常由金融机构提供,其利率会随市场行情变化,借款人可选用固定利率或浮动利率方案。 - **公积金信贷**:该类贷款获得政府机构的支持,利率一般低于商业信贷,但设有最高贷款金额的限制。 2. **偿付模式** - **等额本金偿付**:每月支付相同数量的本金,利息部分逐月减少,因此整体还款总额会逐步降低。 - **等额本息偿付**:每月支付固定金额的本金与利息组合,利息部分随本金的逐月减少而递减。 3. **住房贷款计算公式** - **等额本息偿付**:每月还款额=贷款本金×[月利率×(1+月利率)^(贷款期数)]÷[(1+月利率)^(贷款期数)-1]。 - **等额本金偿付**:每月应还本金=贷款总额/贷款期数,每月利息=(贷款余额-累计已还本金)×月利率。 4. **Matlab编程基础** - **变量设定**:在Matlab环境中,首要任务是设定贷款数额、年化利率、贷款时长等核心参数。 - **循环控制结构**:借助for循环来模拟每个还款周期的过程,进行本金与利息的计算。 - **函数构建**:将住房贷款的计算逻辑封装为函数,便于重复使用和测试不同条件下的结果。 5. **Matlab代码编写** - **等额本息函数实现**...

320

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧