当前位置: 首页 > article >正文

蓝桥杯 之 贪心与排序

文章目录

  • 训练士兵
  • 三国游戏

  • 在蓝桥杯当中,有一类题型就是考察你的思维,在这一类题型中,我们就得使用到这个 贪心+排序的思想
  • 在这类题目中,我们就常常会发现,自己会出现,知道大体的思路,但是真正要你进行详细化表达的时候,就发现出现这个思维混乱的情况,对此,我们应该多做一下这类型的题目,多思考细节处理

训练士兵

训练士兵

在这里插入图片描述

  • 思路分析:在这一题,我们想的肯定是如果组团的费用便宜的话,我们肯定是使用组团,当然我们还得考虑到什么时候组团不划算(因为你可能会多了一些多余的训练出现),如何找到这个边界是需要我们进行思考的一个问题!
  • 由于考虑到是否多余的问题,所以我们要对输入的元素,按照训练的次数进行降序排序,然后统计找到这个单独训练的时候成本大于一起训练的情况
import os
import sys
#要么全组团,要么全单独。除非你全单独训练比组团都便宜。
#看看全单独和组团谁便宜。要是组团还贵,以后每次训练都不用组团啦。因为再往后慢慢都顶尖了,费用包减少的。
n,S = map(int,input().split(' '))
pc = []
for i in range(n):
    p,c = map(int,input().split(' '))
    pc.append([p,c])                           #pc二维列表,第二维度是每个士兵训练成本和次数
pc.sort(key = lambda x:x[1],reverse = True)    #按每个士兵的 ※※训练次数※※ ※※降序排序※※
sump,a,ans = 0,0,0       
for i in range(n):
    sump += pc[i][0]                           #sump是逐一把左端的p加起来,每次加完都和S比较一下        
    if sump >= S:                              
        a = i - 1                              #12~16行是为了找一个下标a,位置a和他前面的p加起来刚好不超过S
        break
ans += pc[a+1][1]*S                            #a后面的人也要训练,所以为了便宜只能组团。等他们顶尖了就不用组啦~
for i in range(a+1):
    ans += (pc[i][1]-pc[a+1][1])*pc[i][0]      #只剩a及前者时,每人单独练更便宜
print(ans)

三国游戏

在这里插入图片描述

  • 思路分析:在本题目中,我们需要考虑三个人的具体情况,因为是比较其中一个人是否大于剩余的两个人,所以将剩余的两个人的情况进行合并处理,然后作差,再进行排序,我们就一直累加,找到当累加结果大于0的最多的发生的事件次数即可
import os
import sys

# 请在此输入您的代码
n = int(input())

A = list(map(int,input().split()))
B = list(map(int,input().split()))
C = list(map(int,input().split()))

Aw,Bw,Cw = [0]*n,[0]*n,[0]*n

for i in range(n):
  Aw[i] = A[i]-B[i]-C[i]
  Bw[i] = B[i]-A[i]-C[i]
  Cw[i] = C[i]-A[i]-B[i]

Aw.sort(reverse=True)
Bw.sort(reverse=True)
Cw.sort(reverse=True)

ans = 0
acc = 0
cur = 0
for i in range(n):
  if acc + Aw[i] >0:
    acc+=Aw[i]
    cur+=1
  else:
    break
ans = max(cur,ans)

acc = 0
cur = 0
for i in range(n):
  if acc + Bw[i] >0:
    acc+=Bw[i]
    cur+=1
  else:
    break
ans = max(cur,ans)

acc = 0
cur = 0
for i in range(n):
  if acc + Cw[i] >0:
    acc+=Cw[i]
    cur+=1
  else:
    break
ans = max(cur,ans)

if ans !=0:
  print(ans)
else:
  print(-1)


http://www.kler.cn/a/572627.html

相关文章:

  • 大模型gpt结合drawio绘制流程图
  • (二 十 三)趣学设计模式 之 解释器模式!
  • 【单片机】嵌入式系统大纲
  • 关于 QPalette设置按钮背景未显示出来 的解决方法
  • Jmeter简单的压力测试
  • 探索AIGC未来:通义万相2.1与蓝耘智算平台的完美结合释放AI生产力
  • K8s控制器Deployment详解
  • linux文件系统,文件管理
  • WebP2P技术在嵌入式设备中的应用:EasyRTC音视频通话SDK如何实现高效通信?
  • 一文读懂Redis分布式锁
  • AI浏览器BrowserUse:安装与配置(四)
  • 【AD】PCB增加相关图层——以机械层为例
  • Calico-BGP FullMesh模式与RR模式 Day04
  • 解锁Android Drawable:从基础到实战的图形绘制秘籍
  • 基于Asp.net的高校一卡通管理系统
  • Bamos压力和温度分布测量传感器:高性能柔性材料与分层设计助力精准电池监测
  • 深入浅出:Vue项目中Element UI的完整使用指南
  • PHP:动态网站开发的强大工具
  • uniapp-x md5插件
  • HTTP请求报文和HTTP响应报文