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 = 0for 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 = -1while left <= right:mid = (left + right) // 2if check(mid):ans = midleft = mid + 1else:right = mid - 1print(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 = 0for 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 = -1while left <= right:mid = (left + right) // 2if check(mid):ans = midleft = mid + 1else:right = mid - 1print(ans)

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

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁基于LLMS的咒语:通过上下文学习重新思考对齐

一、写作动机&#xff1a; 最近的一项研究&#xff0c;LIMA&#xff0c;表明仅使用1K个示例进行SFT也可以实现显著的对齐性能&#xff0c;这表明对齐微调的效果可能是“表面的”。&#xff08;知识和推理能力来源于预训练&#xff0c;而不是必须通过对齐微调获得的。&#xff…

计算机图形学学习(一)——线的绘制、三角形填充绘制

以下摘抄自本人的计算机图形学上机报告 实验内容及要求&#xff1a; 理解并掌握中点画线法、Bresenham算法、扫描线法和重心坐标法的基本原理和算法步骤。使用编程语言C实现上述算法&#xff0c;并编写相应的代码。对于直线绘制算法&#xff0c;要求能够绘制水平、垂直、斜向等…

【消息队列开发】 实现内存加载

文章目录 &#x1f343;前言&#x1f333;实现思路&#x1f6a9;读取消息长度&#x1f6a9;读取相应长度的消息&#x1f6a9;进行反序列化&#x1f6a9;判定是否有效&#x1f6a9;加入有效消息&#x1f6a9;收尾工作&#x1f6a9;代码实现 ⭕总结 &#x1f343;前言 本次开发目…

未解决的问题:字符数组中元素的个数

情形1&#xff1a; #include<stdio.h> int main() {int arr_int1[10];int arr_int2[]{1,2,3,4,5};char arr_char1[10];char arr_char2[]"world";char arr_char3[]{h,e,l,l,o};int i;i0;while(arr_char2[i]!\0){i;}printf("%d\n",i);i0;while(arr_ch…

lwip优化任务优先级

在lwIP中&#xff0c;ethernetif_input线程负责接收和处理从以太网接口接收到的数据包&#xff0c;而tcpip主线程则负责处理lwIP协议栈中的各种事件和数据包。一般情况下&#xff0c;ethernetif_input线程的优先级应该设置为低于tcpip主线程的优先级。 这是因为在实时操作系统…

HarmonyOS ArkUI入门—HarmonyOS ArkUI来开发一个健康饮食应用

本文演示如果在DevEco Studio 3里面&#xff0c;用HarmonyOS的ArkUI来开发一个健康饮食应用。体验HarmonyOS 3最新API 9&#xff01; 获取HarmonyOS应用 HarmonyOS的ArkUI来开发一个健康饮食的ArkUI程序“ArkUIHealthyDiet”&#xff0c;基础代码已经有了[1]&#xff0c;个人…

20 OpenCV像素重映

文章目录 像素重映remap 重映算子代码示例 像素重映 简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去&#xff0c;形成一张新的图像。 g(x,y)是重映射之后的图像&#xff0c;h(x,y)是功能函数&#xff0c;f是源图像 remap 重映算子 Remap…

Java项目:52 springboot基于SpringBoot的旅游网站的设计与实现013

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 旅游网站主要功能如下&#xff1a; 1.用户管理&#xff1a;注册、登录、退出、修改密码&#xff1b; 2.分类显示&#xff1a;显示旅游路线的分类&am…

MD5算法:密码学中的传奇

title: MD5算法&#xff1a;密码学中的传奇 date: 2024/3/15 20:08:07 updated: 2024/3/15 20:08:07 tags: MD5起源算法原理安全分析优缺点比较技术改进示例代码应用趋势 MD5算法起源&#xff1a; MD5&#xff08;Message Digest Algorithm 5&#xff09;算法是由MIT的计算机…

OpenHarmony教程指南—ArkTS时钟

简单时钟 介绍 本示例通过使用ohos.display 接口以及Canvas组件来实现一个简单的时钟应用。 效果预览 使用说明 1.界面通过setInterval实现周期性实时刷新时间&#xff0c;使用Canvas绘制时钟&#xff0c;指针旋转角度通过计算得出。 例如&#xff1a;"2 * Math.PI /…

Python QT 之PySide6简单入门

目录 1.开发环境配置 1.1 下载PySide6 2.2 配置pycharm相关快捷方式 PySide6_Designer - QT Designer 设计UI PySide6_UIC - 将QT Designer生成的UI文件转换为python文件 PySide6_RCC - 将RCC文件转换为python文件 2.第一个开发实例 2.1 QT desiger设计界面 2.2 将ui文…

一篇普通的生活周记

学习进度汇报&#xff1a; 这周主要是参考着视频敲完了一个vue2后台项目&#xff0c;主要是vue2element-ui,因为之前写项目的时候用过lay-ui&#xff0c;虽然是结合着node.js写的&#xff0c;但是大差不差&#xff0c;所以上手也很快。同时&#xff0c;学长发给我们了ruoyi项目…

关于如何重燃学习的激情

3月1日是我回学校的第一天。经历了长达8个月在家的昏暗时刻&#xff0c;我这10天的感觉和在家的感觉发生了翻天覆地的变化&#xff0c;最明显的莫过于学习状态的改变。 倒不是说在家学的不好&#xff0c;而是说在学校&#xff0c;我对学习的整体感觉&#xff0c;以及专注程度&…

【Leetcode每日一题】 递归 - 反转链表(难度⭐)(35)

1. 题目解析 题目链接&#xff1a;206. 反转链表 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 一、递归函数的核心任务 递归函数的主要职责是接受一个链表的头指针&#xff0c;并返回该链表逆序后的新头结点。递归…

【LeetCode热题100】160. 相交链表(链表)

一.题目要求 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数…

获取淘宝商品详情API数据指南(item_get-获得淘宝商品详情)

获取淘宝商品详情API数据是一个复杂的过程&#xff0c;涉及到多个步骤和可能的权限问题。以下是一个基本的指南&#xff0c;帮助你了解如何使用item_get接口获取淘宝商品详情。 1. 注册淘宝开放平台账号 首先&#xff0c;你需要在淘宝开放平台注册一个账号。这是获取API权限和…

稀碎从零算法笔记Day18-LeetCode:移除链表元素

前言&#xff1a;接近20day的时间&#xff0c;终于来到了链表。 题型&#xff1a;指针、链表 链接&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你…

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

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

精读《精通 console.log》

1 引言 本周精读的文章是 Mastering JS console.log like a Pro&#xff0c;一起来更全面的认识 console 吧&#xff01; 2 概述 & 精读 console 的功能主要在于控制台打印&#xff0c;它可以打印任何字符、对象、甚至 DOM 元素和系统信息&#xff0c;下面一一介绍。 c…

【机器学习】机器学习创建算法第2篇:K-近邻算法【附代码文档】

机器学习&#xff08;算法篇&#xff09;完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;机器学习算法课程定位、目标&#xff0c;K-近邻算法&#xff0c;1.1 K-近邻算法简介&#xff0c;1.2 k近邻算法api初步使用定位,目标,学习目标,1 什么是K-近邻算法,…