python 基础知识点(蓝桥杯python科目个人复习计划64)

今日复习内容:做题

例题1:蓝桥课程抢购

问题描述:

为了能让更多的同学学到IT技术,蓝桥云课又开始了课程限时打折活动。

作为初学者的你,希望尽可能买到含金量总额更高的课程,当然其他同学也是这么想。

由于购买课程的同学实在太多,蓝桥云课服务器宽带供不应求,导致同学们购买课程需要等待一定时间。

比如现在有3门课程:

《Java程序设计》需要等待3分钟,打折活动在3分钟后结束,该课程含金量为6;

《python程序设计》需要等待2分钟,打折活动在2分钟后结束,该课程含金量为3;

《c程序设计》需要等待1分钟,打折活动在3分钟后结束,该课程含金量为5。

方案一:选java,那么你可以抢购到含金量为6的课程。

方案二:可以先购买python,等待结束后再购买c,这样含金量就是8;

请注意,只能同时参与一门课程的抢购活动,且开始等待后不允许中途退出只有在打折活动有效期内才可以抢购课程。

输入格式:

第一行是一个整数N,代表蓝桥云课中有N门课程。

紧接着N行,每行3个正整数,A(购课等待时间),B(打折活动截止时间),C(课程含金量)。

输出格式:

输出一行一个整数,代表你能购买到课程最大的含金量总值。

参考答案:

def work():
    n = int(input())
    a = [[0,0,0]] + [list(map(int,input().split())) for i in range(n)]
    a.sort(key = lambda x:x[1])
    f = [[0]*(int(1e5) + 10)for i in range(n + 1)]
    for i in range(1,n + 1):
        for j in range(int(1e5) + 10):
            f[i][j] = f[i - 1][j]
            if a[i][1] >= j >= a[i][0]:
                f[i][j] = max(f[i][j],f[i - 1][j - a[i][0]] + a[i][2])
    print(max(f[n]))
if __name__ == '__main__':
    work()

运行结果:

 

以下是对此题的理解:

这道题是一个经典的动态规划问题,需要在有限的时间内选择购买课程以获取最大的含金量。

主要思路如下:

首先,从 输入中获取课程的数量n和没门课程的等待时间,结束时间和含金量。

对所有课程按照结束时间进行排序,这样可以方便后续的状态转移。

创建一个二维数组f,其中f[i][j]表示在前i门课程中,花费了j分钟等待时间所能获取的 最大含金量。

初始化f数组,将所有值设为0.

遍历每门课程,对于第i门课程:

遍历所有的等待时间j,如果当前课程的等待时间在[j,当前等待时间]的范围内,则更新f[i][j]为钱i - 1门课程中等待时间为j - 当前课程等待时间时的最大含金量加上当前课程的含金量。

最后,返回f[n][等待时间上限]中的最大值,即为最优解。


例题2:小兰的神秘礼物

问题描述:

小兰要过生日了,好朋友妮妮想送她一个礼物。妮妮找来了一个神秘的箱子,箱子的容量为v,她还收集了n个神秘的小物件,每个物件都有一个体积x。

妮妮想把这些物件中的一部分装进箱子里,当然也可以一个都不装。但是,为了增加神秘感,她希望箱子装得尽可能满,剩余的空间最小。你能帮妮妮计划一下,让她知道箱子最终的最小剩余空间吗?

输入格式:

第一行共一个整数V,表示箱子的容量。

第二行包含一个整数n,表示小物件的数量。

接下来n行,每行包含一个正整数x,表示第i个小物件的体积。

数据范围保证:0 < n <= 1000,1 <= x,v <= 1000

输出格式:

输出一个整数,表示箱子的最小剩余空间。

参考答案:

import os
import sys
v = int(input())
n = int(input())
f = [[0]*(v + 1) for i in range(n + 1 )]
for i in range(1,n + 1):
    vv = int(input())
    for j in range(v + 1):
        f[i][j] = f[i - 1][j]
        if j >= vv:
            f[i][j] = max(f[i][j],f[i - 1][j - vv] + vv)
print(v - f[n][v])

运行结果:

 

以下是我对此题的理解:

这道题目是一个经典的背包问题,需要在给定的箱子容量下,选择尽可能多的小物件装进箱子里,使得箱子装得尽可能满,剩余空间最小。

主要思路如下:

首先,从输入中获取箱子的容量和小物件的数量;

创建一个二维数组f,其中f[i][j]表示在前i个物件中,填满容量为j的箱子所剩余的最小空间;

初始化f数组,将其值全部设为0。

遍历每个小物件,对于第i个小物件:

遍历可能的箱子容量j,如果当前箱子容量j大于等于当前小物件的体积vv,则更新f[i][j]为前i - 1个物件中填满容量为j - 当前物件的体积vv的箱子所剩余的最小空间加上当前物件的体积vv;

最后,返回v与f[n][v]的差值,即为箱子所剩余的最小空间。


例题3:小蓝的神秘行囊

问题描述:

小蓝 是一名著名的探险家,他即将踏上异常特殊的寻宝冒险旅程。他的目标是寻找和收集各种神秘的宝物。他有一个神秘的行囊,能够装载各种物品。然而,这个行囊有一个特殊的规定:它的最大容量为v,并且它能承载的最大重量为m。

小蓝来到一个古老的城堡,里面有n件神秘的宝物,每件宝物只能被取走一次,每件宝物都有其特定的体积vi,重量mi和价值wi。

面对眼前的宝物,小蓝需要做出决定:将哪些宝物放入他的行囊,使得宝物的总体积不超过行囊的容量,总重量不超过行囊所能从承载的最大重量,且价值之和最大。

你的任务是帮助小蓝找出应该带走哪些宝物,并输出最大的宝物价值和。

输入格式:

第一行是3个整数n,v,m,分别用来表示宝物的数量,行囊的容量和能承载的最大重量。

接下来的n行,每行包括3个整数vi,mi,wi,分别表示每一个宝物的体积,重量和价值。

数据范围保证:0 < n <= 1000,0 < v,m <= 100,0 < vi,mi <= 100,0 < wi <= 1000

输出格式:

输出一个整数,表示可以装入行囊的宝物的最大价值。

参考答案:

n,v,m = map(int,input().split())
f = [[[0] * (m + 1)for i in range(v + 1)]for i in range(n + 1)]
for i in range(1,n + 1):
    vv,mm,ww = map(int,input().split())
    for j in range(v + 1):
        for k in range(m + 1):
            f[i][j][k] = f[i - 1][j][k]
            if j >= vv and k >= mm:
                f[i][j][k] = max(f[i][j][k],f[i - 1][j - vv][k - mm] + ww)
print(f[n][v][m])

运行结果:


例题4:加训啦

问题描述:

有一个兵营里面有n个士兵,每个士兵都有一个力量值ai。假设你是一名士兵长,你想通过训练,使得那么兵营的力量的下限尽可能大(兵营力量值的下限取决于兵营里面力量值最小的那个士兵)。

你有k点精力,m种训练计划,每种训练计划都有一个力量提升值bi,即一个士兵完成训练后,力量值会提升bi。

以及每种训练方法都有一个消耗值ci,即你每次分配训练计划你的精力都会消耗ci。

你可以消耗精力值分配训练方案给士兵,每种训练计划没有限制,即每个士兵可以训练任意训练计划 无数次,只要你的精力还够。

小蓝想让你告诉他,他的军营的兵营力量值的下限最大是多少?

输入格式:

输入共4行,第一行3个整数n,m,k,分别表示士兵数量,训练计划数和初始经历值。

第二行n个整数,表示每个士兵的初始力量值ai。

第3行m个正整数,表示每种训练计划的力量提升值 bi。

第4行m个正整数,表示每种训练计划的力量消耗值ci。

输出格式:

输出只有一行,表示兵营力量下限的最大值。

参考答案:

import math
def check(x):
    tot = 0
    for i in range(1,n + 1):
        if aa[i] < x:
            tot += f[m][x - aa[i]]
    return tot <= k
n,m,k = map(int,input().split())
aa = [0] + list(map(int,input().split()))
bb = [0] + list(map(int,input().split()))
cc = [0] + list(map(int,input().split()))
f = [[math.inf]*(int(1e4) + 100)for i in range(m + 1)]
f[0][0] = 0
for i in range(1,m + 1):
    for j in range(int(1e4) + 100):
        f[i][j] = min(f[i - 1][j],f[i][max(0,j - bb[i])] + cc[i])
left = 0
right = int(1e4) + 100
ans = -1

while left <= right:
    mid = (left + right) // 2
    if check(mid):
        ans = mid
        left = mid + 1
    else:
        right = mid - 1

print(ans)

运行结果:

 

以下是我对此题的理解:

这道题目是一个经典的贪心算法问题,需要通过训练计划来提升士兵的力量值,使得兵营的力量下限尽可能大。
这段代码的主要思路如下:
1. 首先,从输入中获取士兵数量n,训练计划数m,以及初始经历值k。
2. 获取每个士兵的初始力量值ai,并记录每种训练计划的力量提升值bi和力量消耗值ci。
3. 创建一个函数check(x),用于检查是否能够通过训练提升士兵的力量值至少为x。这个函数的实现逻辑是遍历每个士兵,如果其力量值小于x,则计算通过训练提升后的力量值是否能够达到x,如果达到则返回True,否则返回False。
4. 初始化二分查找的左右边界left和right,其中left初始化为0,right初始化为一个足够大的值(这里取了1e4 + 100)。
5. 使用二分查找的方式寻找力量下限的最大值。在每次迭代中,计算中间值mid,并调用check函数检查是否能够通过训练提升士兵的力量值至少为mid。如果能够达到,则更新ans为当前的mid,并将left更新为mid + 1;否则,将right更新为mid - 1。
6. 最终,输出ans即为兵营力量下限的最大值。
这样,代码利用贪心算法的思想,通过二分查找求解出兵营力量下限的最大值,从而达到优化士兵训练计划的目的。

我优化一下:

import math
def check(x):
    tot = 0
    for i in range(1,n + 1):
        if aa[i] < x:
            tot += f[x - aa[i]]
    return tot <= k
n,m,k = map(int,input().split())
aa = [0] + list(map(int,input().split()))
bb = [0] + list(map(int,input().split()))
cc = [0] + list(map(int,input().split()))
f = [math.inf]*(int(1e4) + 100)
f[0] = 0
for i in range(1,m + 1):
    for j in range(int(1e4) + 100):
        f[j] = min(f[j],f[max(0,j - bb[i])] + cc[i])
left = 0
right = int(1e4) + 100
ans = -1

while left <= right:
    mid = (left + right) // 2
    if check(mid):
        ans = mid
        left = mid + 1
    else:
        right = mid - 1

print(ans)

OK,今天就写到这里,下一篇继续! 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/459977.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

健康消费需求持续上涨,品牌如何抓住机遇

近年来&#xff0c;国内“大健康”时代徐徐展开&#xff0c;居民消费热度不断攀升&#xff0c;主动健康消费已经成为新的增长点&#xff0c;然而健康行业的内容由于专业性较高&#xff0c;传播范围有限导致无法直接触达用户。在当下的传播环境中&#xff0c;品牌应该如何抓住机…

HPA数据库及HPAanalyze包使用

关于HPA数据库的介绍&#xff1a;Human Protein Atlas 数据库 – 王进的个人网站 (jingege.wang) The Human Protein Atlas 文献 HPAanalyze: an R package that facilitates the retrieval and analysis of the Human Protein Atlas data | BMC Bioinformatics | Full Text …

H5 流光分割个人主页源码

源码名称&#xff1a;流光分割个人主页源码 源码介绍&#xff1a;一款流光分割特效个人主页源码&#xff0c;源码带大量跳转个人联系方式按钮和朋友按钮。同时带有个人介绍。 需求环境&#xff1a;H5 下载地址&#xff1a; https://www.changyouzuhao.cn/10241.html

LeetCode每日一题 将有序数组转换为二叉搜索树(分治)

题目描述 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵平衡二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视…

林木园区改造VR仿真培训课件提高人们的专业素质

森林经营VR模拟体验摆脱了传统森林经营周期长、实践难及耗材大等问题&#xff0c;借助VR虚拟仿真技术为人们提供一种全新的、沉浸式的森林经营体验&#xff0c;让人们更好地了解森林经营的全周期。 提高人们的环保意识 通过亲身参与森林经营的过程&#xff0c;人们可以更直观地…

mysql: 如何开启慢查询日志?

1 确认慢查询日志功能已开启 执行以下sql语句&#xff0c;查看慢查询功能是否开启&#xff1a; show VARIABLES like slow_query_log;如果为ON&#xff0c;表示打开&#xff1b;如果为OFF&#xff0c;表示没有打开&#xff0c;需要开启慢查询功能。 执行以下sql语句&#xff0…

【MATLAB源码-第163期】基于matlab的BPSK+瑞利(rayleigh)信道下有无波束成形误码率对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在通信系统中&#xff0c;波束成形&#xff08;Beamforming&#xff09;技术是一种广泛使用的信号处理技术&#xff0c;通过调整天线阵列中各个元素的相位和幅度&#xff0c;使得信号在特定方向上增强&#xff0c;在其他方向…

CC连接过程

1、CC线连接过程 DFP和UFP会实时监控CC1和CC2引脚的电压&#xff0c;来评估DFP和UFP是否都已经在位。同时DFP可以根据电压确定自己所能提供的电流的大小 2、连接过程 Source端使用一个MOS管去控制Vbus&#xff0c;初始状态下&#xff0c;FET为关闭状态&#xff0c;Vbus不通。S…

Transformer的前世今生 day01(预训练

预训练 在相似任务中&#xff0c;由于神经网络模型的浅层是通用的&#xff0c;如下图&#xff1a; 所以当我们的数据集不够大&#xff0c;不能产生性能良好的模型时&#xff0c;可以尝试让模型B在用模型A的浅层基础上&#xff0c;深层的部分自己生成参数&#xff0c;减小数据集…

SQL面试学习 行列转换

行列转换 多行转多列 concat_ws&#xff1a;把集合中的值用指定分隔符连接 collect_set&#xff08;&#xff09;&#xff1a;收集唯一值并返回一个集合 SQL字符串拼接函数concat()、collect_set()、collect_list()和concat_ws()用法 cast&#xff08;&#xff09;将任何类型…

微信小程序开发学习笔记《21》uni-app框架-楼层图片跳转

微信小程序开发学习笔记《21》uni-app框架-楼层图片跳转 博主正在学习微信小程序开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、创建新的分包goods_list 二、将请求到的楼层数据url调整为本地的 可以看到上图是请求…

14 stack和queue的使用

stack的介绍 stack文档 1.stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入和提取操作 2.stack是作为容器适配器被实现的&#xff0c;容器适配器是对特定类封装作为其底层的容器&#xff0c;并提供…

使用 Docker Compose 快速搭建监控网站 uptime-kuma

有时候需要监控自己搭建的一些网站、服务是否正常运行&#xff0c; 这时候可以考虑使用一个监控网站&#xff0c; 定时的进行检测&#xff0c; 记录网站、服务的运行状态&#xff0c; 在这推荐使用 uptime-kuma。 博主博客 https://blog.uso6.comhttps://blog.csdn.net/dxk539…

计算机毕业设计-基于大数据分析的服装定制网的设计与实现

概要 人民的日常生活离不开“衣食住行”&#xff0c;四者之中“食住行”发展迅猛&#xff0c;突飞猛进的发展推动了产业的升级更新。而与之形成鲜明对比的是&#xff0c;服装行业作为传统古老的行业&#xff0c;因为产业结构特征、个性化需求等问题&#xff0c;难以出现推动行业…

支小蜜AI校园防欺凌系统可以使用在宿舍吗?

随着人工智能技术的快速发展&#xff0c;AI校园防欺凌系统已成为维护校园安全的重要手段。然而&#xff0c;关于这一系统是否适用于宿舍环境&#xff0c;仍存在一些争议和讨论。本文将探讨AI校园防欺凌系统在宿舍中的适用性&#xff0c;分析其潜在的优势与挑战&#xff0c;并提…

iptables详细介绍

在 CentOS 中,iptables 是一种用于配置和管理网络防火墙的工具,它提供了一种灵活和强大的方式来控制进出服务器的网络流量。以下是 CentOS 中 iptables 的主要内容: 规则链(Chains): iptables 使用规则链来组织规则,常见的链包括: INPUT:处理进入服务器的数据包。OUTP…

蓝桥杯2022年第十三届省赛真题-裁纸刀

443 对于m行n列 次数 4 m - 1 (n-1)*m 其中4是裁掉边缘&#xff1b;行需要裁m-1次&#xff1b;每个小长条需要裁n-1次&#xff0c;一共有m个小长条

代码学习记录20--回溯算法开始

随想录日记part20 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.15 主要内容&#xff1a;今天开始就要开始学习回溯算法了&#xff0c;今天主要学习其基本理论以及在组合问题中的应用。 理论基础第77题. 组合 Topic1理论基础 1.回溯算法的题目分类&#…

Transformer模型的Pytorch实现

Transformer的Pytorch实现有多个开源版本&#xff0c;基本大同小异&#xff0c;我参考的是这份英译中的工程。 为了代码讲解的直观性&#xff0c;还是先把Transformer的结构贴上来。 针对上述结构&#xff0c;我们从粗到细地来看一下模型的代码实现。 1. 模型整体构造 clas…

湖北省建筑安全员C证考试通过后,如何在各平台快速查询

湖北省建筑安全员C证考试通过后&#xff0c;如何在各平台快速查询&#xff1f; 2024年湖北省建筑安全员C证&#xff08;建安C&#xff09;证书查询 蛮多人考过建筑安全员C证不知道在哪里查询&#xff0c;建筑行业的安全员C证也称之为专职安全员&#xff0c;建筑安全员ABC /三…