实验三:贪心
1.减肥的小k1
题目描述
小K没事干,他要搬砖头,为了达到较好的减肥效果,教练规定的方式很特别:
每一次,小K可以把两堆砖头合并到一起,消耗的体力等于两堆砖头的重量之和。
经过 n-1次合并后, 就只剩下一堆了。小K在搬砖头时总共消耗的体力等于每次合并所耗体力之和。小K为了偷懒,希望耗费的体力最小。
例如有 3堆砖头,数目依次为 1、2、9 。可以先将 1 、 2 堆合并,新堆数目为3 ,耗费体力为 3 。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为 12 ,耗费体力为12 。所以总共耗费体力 =3+12=15。可以证明 15为最小的体力耗费值。
输入要求
共两行。
第一行是一个整数 n(1≤n≤1000) ,表示砖头堆数。
第二行n个整数,每个整数表示每堆砖头的砖头块数。
输出要求
一个整数,也就是最小的体力耗费值。
输入样例
3
1 2 9
输出样例
15
这个问题很简单,只需要每次挑两个最小的加到sum里,再将两个数之和放回到数组中,并使得数组有序,操作n-1次之后就得到了想要的解。
#include<bits/stdc++.h>
using namespace std;
int main()
{int n,a[1000],sum=0,i;cin >> n;for ( i = 0; i < n; i++){cin >> a[i];}sort(a, a + n);// 计算两个最小数之和,加入到sum中,并且放回到原数组中使其有序for ( i = 0; i < n - 1; i++) {int temp = a[i + 1] + a[i];//记录前两个最小的值int k = i + 2;//k为第三个的下标// 找到一个合适的位置放置 tempwhile (a[k] < temp && k < n){// 比较第三个和前两个的和,若第三个比前两个要小// 这里 a[k-1]是无效位,因为已经将a[k-1]和a[k-2]的值赋给了temp,可以随意覆盖。a[k - 1] = a[k];//前移k++;}// 找到正确的位置将数字放入该位置a[k - 1] = temp;sum += temp;}cout << sum << endl;return 0;
}
2.最小跳数
题目描述
给定一个非负整数数组,假定你的初始位置为数组第一个位置。数组中的每个元素代表你在那个位置能够跳跃的最大长度。你的目标是到达最后一个下标位置,并且使用最少的跳跃次数。
输入要求
输入一组非负整数数组,数组长度不超过500。
输出要求
最少经过几次跳跃,可以到达最后一个位置。
输入样例
2 3 1 1 4
输出样例
2
#include<bits/stdc++.h>
using namespace std;
int a[501]={0},ct=0;//ct表示跳跃的次数
int jump(int i,int len)
{int k,j=0,l,max=0;// 已经退出了if(i>=len-1) return 0;// 还要继续跳k=a[i];ct++;// 再向前跳k步可以跳出范围if(i+k>=len-1) return 0;// 找出未来a[i]个元素中能跳到的最远距离for(l=i+1;l<=i+k;l++){// 设置一个max用于记录能跳到的最大距离// 如果在位置 l 跳长度为 a[l] 的距离,到达 l+a[l]// 如果 l+a[l] > max 就将下一个落点设置到 j=l 处// 按此方法,每次都跳到该区间中能到达的最远位置,就能得到最优解if(max<=l+a[l]){//更新数据j=l;max=l+a[l];}}jump(j,len); //跳到最远的数组里
}
int main()
{int x,len,i=0;while(cin>>x){a[i++] = x;}len = i;//len表示数组长度jump(0,len);cout<<ct<<endl;return 0;
}
3.区间问题
题目描述
给出n个区间的起点和终点,求最少使用其中多少个区间可以将所有区间所在的区域完全覆盖。(测试的数据确保这1点)。
输入要求
第1行一个整数n,表示n个区间;
第2行开始n行,每行2个整数,表示一个区间范围。
类似[1,4][5,6]被认为是覆盖了[1,6]。
输出要求
从起点开始,按区间先后顺序,输出选中的区间。所选的区间应尽可能向终点扩展。
输入样例
7
1 5
1 6
3 6
1 7
6 9
9 10
7 9
输出样例
1 7
6 9
9 10
输入区间,按照区间左端点将区间进行排序,左端点相同的区间按照右端点排序。
在给定的区间内找到最小值和最大值作为做起点和终点。
初始右区间设定为起点,左区间设定为起点。
#include<bits/stdc++.h>
using namespace std;
struct Area
{int left, right;
}area[100],r[100];
// 定义比较区间大小的规则
bool cmp(Area a,Area b)
{if (a.left < b.left)return true;else if (a.left == b.left && a.right < b.right)return true;else return false;
}
int main()
{// 初始化int n,i,cnt=0;cin >> n;for ( i = 0; i < n; i++) {cin >> area[i].left >> area[i].right;}// 排序sort(area, area + n, cmp);int right = area[0].left - 1;// 初始的右端点int end = area[n - 1].right;// 终点// 遍历每个区间段,更新右端点的范围for (i = 0; i < n-1;) {int max_right = area[i].right;// 定义能得到的最大右端点int max_index = i;while (area[i].left <= right + 1 && i < n){// 该区间左边小于当前的右端点,+1 这种情况代表两个区间是紧挨着的if (area[i].right > max_right){max_right= area[i].right;//记录能到达的最大的右端点的值max_index = i;//记录能到达的最大的右端点的区间编号}i++;}// 这里每次循环的右端点是受限的,只有一小部分区间会参与// 随着右端点的右移,算法不断接近最优解right = max_right;//更新右的值r[cnt++] = area[max_index];//数组中记录被选择的区间i = max_index;if (right == end) break;//嘿嘿终于到终点啦~~结束}for (i = 0; i < cnt; i++){cout << r[i].left << " " << r[i].right << endl;}return 0;
}
4.种树
题目描述
一条街的一边有几座房子。因为环保原因居民想要在路边种些树,路边的地区被分割成块,并被编号成1…N;
每个部分为一个单位尺寸大小并最多可种一棵树,每个居民想在门前种些树并指定了三个号码B,E,T,这三个数表示该居民想在B和E之间最少种T棵树。
当然,B≤E,居民必须记住在指定区不能种多于区域地块数的树,所以T≤E-B+l。
居民们想种树的各自区域可以交叉。你的任务是求出能满足所有要求的最少的树的数量。
输入要求
第一行包含数据N,区域的个数;
第二行包含H,房子的数目;
下面的H行描述居民们的需要:B E T。
输出要求
输出能满足所有要求的最少的树的数。
输入样例
9
4
1 4 2
4 6 2
8 9 2
3 5 2
输出样例
5
#include<iostream>
#include<algorithm>
using namespace std;struct request
{//定义一个结构体来存储居民的需求int B,E,T;//B:左端点,E:右端点,T:需要种的树的数量
}a[500];
bool cmp(request a,request b)
{if(a.E==b.E)return a.B<b.B;return a.E<b.E;
}
int main()
{int B,E,T;int N,H;cin>>N>>H;for(int i=1;i<=H;i++){cin>>a[i].B>>a[i].E>>a[i].T;}sort(a+1,a+1+H,cmp);//按照右端点的大小对需求进行排序int num=0;//num表示树的总数int road[10000]={0};//用road数组记录道路上是否已经种树for(int i=1;i<=H;i++)//遍历每一条需求{int ans=0;for(int j=a[i].B;j<=a[i].E;j++)ans+=road[j];//ans表示B到E已经种了多少棵树for(int j=a[i].E;j>=a[i].B&&ans<a[i].T;j--)//尽量从右开始种树 {if(!road[j])//如果tr[j]的位置上还没被种树的话,种树 {road[j]=1;ans++;num++;}}}cout<<num<<endl;return 0;
}
相关文章:
实验三:贪心
1.减肥的小k1 题目描述 小K没事干,他要搬砖头,为了达到较好的减肥效果,教练规定的方式很特别: 每一次,小K可以把两堆砖头合并到一起,消耗的体力等于两堆砖头的重量之和。 经过 n-1次合并后, …...

MySQL日志文件
文章目录1.MySQL中的日志文件2.bin log的作用3.redo log的作用4.bin log和redo log的区别(1)存储的内容(2)功能(3)写入时间(4)写入方式5.两阶段提交6.undo log的作用1.MySQL中的日志…...
Intel8086处理器使用NASM汇编语言实现操作系统08-关于负数的相关处理idiv/cbw/cwde/cdqu/cwd/cdq/cdo/
很多人都知道一个有符号的数,最高位是1,则表示负数,最高位是0,则表示正数,如果假设我的CPU是4位CPU,那么对于1001这个数,是表示9,还是表示-7呢???…...

JavaScript 混淆技术
根据JShaman(JShaman是专业的JavaScript代码混淆加密网站)提供的消息,JavaScript混淆技术大体有以下几种: 变量混淆 将带有JS代码的变量名、方法名、常量名随机变为无意义的类乱码字符串,降低代码可读性,如…...
安装库报错:No CUDA runtime is found, using CUDA_HOME=‘/usr/local/cuda-11.3‘
1、报错内容 安装库时报错: No CUDA runtime is found, using CUDA_HOME/usr/local/cuda-11.32、检查 查看cuda版本和pytorch版本 python 进入python环境 import torch torch.__version__ torch.cuda.is_available()nvidia-smi 因此发现是由于该虚拟环境中CUDA与…...

CVTE前端面经(2023)
CVTE前端面经项目介绍(重点)在数据B中找到数组A对应的值,并把数组B对应的值放在数据最前面css1 定位2 外边距3 css高级应用3.1. 过渡3.2. 变形2. 浮动2.1 浮动元素特点2. 2 清除浮动3. html5语义标签4. 实现圣杯布局的两种方式4.1 定位浮动4.…...
基于EB工具的TC3xx_MCAL配置开发02_ICU模块配置
目录 1.概述2. ICU 硬件通道属性确认3. ICU通道配置3.1 添加一个Chanel3.2 IcuChannel->General配置3.3 IcuSignalMeasurement配置3.4 GtmTimerInputConfiguration配置3.5 MCU中的关联配置3.5.1 分配TIM资源给ICU使用3.5.2 设置TIM通道时钟分频系数1.概述 本篇开始我们基于…...

jmeter高阶系列--beanshell返回值中提取参数
1 准备环境 jmeter版本: ** ,JDK:1.8将json.jar包置于…\apache-jmeter-5.1\lib\下;否则会报:Typed variable declaration : Class: JSONObject not found in namespace的错误;处理器:Beanshel…...
面向对象
面向对象面向对象一、什么是对象二、什么是面向对象三、对象四、什么是类五、实例变量六、实例方法七、方法重载(overload)八、构造方法九、对象的创建过程十、构造方法重载十一、this关键字面向对象 一、什么是对象 万物皆对象。 二、什么是面向对象 面向对象是一种编程思想。…...

mpi4py 运行过程中出现Read -1, expected xxx, errno = 1 解决方案
目录 问题描述 代码1(串行) 代码2(并行) 代码2执行时所用指令 错误信息 解决方案 解决方案1 解决方案2 问题描述 今天正在学习使用mpi4py,在对比运行以下2个代码时疯狂报错: 代码1(串…...
PMP考前冲刺3.07 | 2023新征程,一举拿证
题目1-2:1.某公司启动了一个新型智能家电研发敏捷项目,组织上聘请了一位敏捷管理专业人士。在项目执行过程中,敏捷团队反馈用户故事包含的信息不足,无法理解需求,敏捷管理专业人应该怎么做?A.教导产品负责人…...
60条Python日常工作中的高频写法,收藏
一、 数字 1 求绝对值 绝对值或复数的模 In [1]: abs(-6) Out[1]: 62 进制转化 十进制转换为二进制: In [2]: bin(10) Out[2]: 0b1010十进制转换为八进制: In [3]: oct(9) Out[3]: 0o11十进制转换为十六进制: In [4]: hex(15) Out[4]:…...
(小甲鱼python)函数笔记合集七 函数(XI)总结 python函数的函数文档、类型注释、内省详解
一、基础复习 函数的基本用法 创建和调用函数 函数的形参与实参等等函数的几种参数 位置参数、关键字参数、默认参数等函数的收集参数*args **args 解包参数详解函数中参数的作用域 局部作用域 全局作用域 global语句 嵌套函数 nonlocal语句等详解函数的闭包(工厂函…...

Leetcode是什么
力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT 技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。 此外,力扣(Leet…...
2023-03-07 MySQL—基于规则优化-子查询优化
简介 在使用MySQL编写查询语句时,有时候无法避免的会写出一些执行起来十分耗时、耗性能的语句,但是MySQL在执行这些语句的时候,还是会竭尽全力的做出一些优化,把这个很糟糕的语句转换成某种可以比较高效执行的形式,这个过程也可以被称作查询重写 条件化简 我们编写查询…...

Rocketmq技术详解
Rocketmq技术详解 运维部署 docker-compose.yml version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876volumes:- ./logs:/opt/logs- ./store:/opt/storenetworks:rmq:aliases:- rmqnamesrvrmqbroker:image: foxisw…...

TeeChart VCL/FMX v2023 crack
TeeChart VCL/FMX v2023 crack TeeChart Pro VCL允许您为所有领域(包括商业、工程、金融、统计、科学、医疗、实时和网络)创建通用和专用图表和绘图应用程序。TeeChart Pro VCL具有多种图表类型的图表库,包括2D或3D线条、条形图、水平条、区域、点、饼图、箭头、气泡…...

[Java·算法·困难]LeetCode32. 最长有效括号
每天一题,防止痴呆题目示例分析思路1题解1分析思路2题解2分析思路3题解3👉️ 力扣原文 题目 给你一个只包含 ( 和 ) 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 输入:s "(()&q…...
pytorch如何搭建一个最简单的模型,
一、搭建模型的步骤 在 PyTorch 中,可以使用 torch.nn 模块来搭建深度学习模型。具体步骤如下: 定义一个继承自 torch.nn.Module 的类,这个类将作为我们自己定义的模型。 在类的构造函数 __init__() 中定义网络的各个层和参数。可以使用 to…...

JS实现css的hover效果,兼容移动端
Hi I’m Shendi JS实现css的hover效果,兼容移动端 功能概述 CSS的hover即触碰时触发,在电脑端鼠标触碰,移动端手指触摸 有的时候光靠css实现不了一些效果,例如元素触发hover,其他元素触发动画效果,所以需要…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...