算法刷题day14
目录
- 引言
- 一、平均
- 二、三国游戏
- 三、松散子序列
引言
今天做了三道新题,类型是贪心、枚举、DP,不是特别难,但是努力一下刚好能够够得上,还是不错的,只要能够一直坚持下去,不断刷题不断总结,就是记忆力和毅力了,加油!
一、平均
标签:贪心
思路:贪心这种题目只能是见过类似的,然后去变种,一般比赛中是不太可能去现推出来的,这里只讲一下解题思路。这个变数只有四种情况,多变多、多变少、少变多、少变少。
1.多变多:多的给多的,那么一个变少了一个变多了,变多了的肯定又要变成少的,所以相当于第一步就多余了,反而代价多了
2.少变多:少的变多的,那么肯定会有一个多的变成少的,那么就要多变,相当于第一步也就多余了
3.少变少:其中的一个少的变少了,肯定会有一个多的变成这个少的,所以第一步也多余了
所以说只能是多的变少的,由于n的数量刚好,所以多余的部分肯定是会变的,要求又得是代价最少,那么就把多余的代价少的那部分变了就行了。
题目描述:
有一个长度为 n 的数组(n 是 10 的倍数),每个数 ai都是区间 [0,9] 中的整数。小明发现数组里每种数出现的次数不太平均,而更改第 i 个数的代价为 bi,他想更改若干个数的值使得这 10 种数出现的次数相等
(都等于 n10),请问代价和最少为多少。输入格式
输入的第一行包含一个正整数 n。接下来 n 行,第 i 行包含两个整数 ai,bi,用一个空格分隔。输出格式
输出一行包含一个正整数表示答案。数据范围
对于 20% 的评测用例,n≤1000;
对于所有评测用例,n≤105,0<bi≤2×105。输入样例:
10
1 1
1 2
1 3
2 4
2 5
2 6
3 7
3 8
3 9
4 10
输出样例:
27
样例解释
只更改第 1,2,4,5,7,8 个数,需要花费代价 1+2+4+5+7+8=27。
示例代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>using namespace std;typedef long long LL;const int N = 1e5+10;int n;
vector<int> arr[10];int main()
{ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);cin >> n;for(int i = 0; i < n; ++i){int a, b;cin >> a >> b;arr[a].push_back(b);}LL res = 0, ave = n / 10;for(int i = 0; i < 10; ++i){if(arr[i].size() > ave){sort(arr[i].begin(), arr[i].end());for(int j = 0; j < arr[i].size() - ave; ++j) res += arr[i][j];}}cout << res << endl;return 0;
}
二、三国游戏
标签:枚举
思路:这道题只有三种情况胜出,然后在这其中, x i > y i + z i , i ∈ ( 1 , n ) 当中任选多个 x_i>y_i+z_i,i\in(1,n)当中任选多个 xi>yi+zi,i∈(1,n)当中任选多个,即 x i − y i − z i > 0 , i ∈ ( 1 , n ) 当中任选多个 x_i-y_i-z_i>0,i\in(1,n)当中任选多个 xi−yi−zi>0,i∈(1,n)当中任选多个,可以规定一个 w i w_i wi来表示左半边,也就是有多个 w i w_i wi问最多能选多少个使得它们的和大于0,我们可以把这些 w i w_i wi由大到小排序,然后到了边界条件判断一下就可以了。最后结果从三个国家胜出的最大结果中选最大的就行了。
题目描述:
小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X,Y,Z(一开始可以认为都为 0)。游戏有 n 个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i 个事件发生时会分别让 X,Y,Z
增加 Ai,Bi,Ci。当游戏结束时 (所有事件的发生与否已经确定),如果 X,Y,Z 的其中一个大于另外两个之和,我们认为其获胜。例如,当 X>Y+Z 时,我们认为魏国获胜。小蓝想知道游戏结束时如果有其中一个国家获胜,最多发生了多少个事件?如果不存在任何能让某国获胜的情况,请输出 −1。输入格式
输入的第一行包含一个整数 n。第二行包含 n 个整数表示 Ai,相邻整数之间使用一个空格分隔。第三行包含 n 个整数表示 Bi,相邻整数之间使用一个空格分隔。第四行包含 n 个整数表示 Ci,相邻整数之间使用一个空格分隔。输出格式
输出一行包含一个整数表示答案。数据范围
对于 40% 的评测用例,n≤500;对于 70% 的评测用例,n≤5000;
对于所有评测用例,1≤n≤105,0≤Ai,Bi,Ci≤109。
注意,蓝桥杯官方给出的关于 Ai,Bi,Ci 的数据范围是 1≤Ai,Bi,Ci≤109,但是这与给出的输入样例相矛盾,因此予以纠正。输入样例:
3
1 2 2
2 3 2
1 0 7
输出样例:
2
样例解释
发生两个事件时,有两种不同的情况会出现获胜方。
发生 1,2 事件时蜀国获胜。
发生 1,3 事件时吴国获胜。
示例代码:
#include <cstdio>
#include <iostream>
#include <algorithm>using namespace std;typedef long long LL;const int N = 1e5+10;int n;
int a[N], b[N], c[N], w[N];LL work(int x[], int y[], int z[]) //x国家胜出
{for(int i = 0; i < n; ++i) w[i] = x[i] - y[i] - z[i];sort(w, w+n, greater<int>());LL sum = 0, res = -1;for(int i = 0; i < n; ++i){sum += w[i];if(sum > 0) res = i + 1;else break;}return res;
}int main()
{ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);cin >> n;for(int i = 0; i < n; ++i) cin >> a[i];for(int i = 0; i < n; ++i) cin >> b[i];for(int i = 0; i < n; ++i) cin >> c[i];LL res = max({work(a, b, c), work(b, a, c), work(c, a, b)});cout << res << endl;return 0;
}
三、松散子序列
标签:状态机DP
思路:这个题目的意思就是从一个字符串中选一段子序列,然后不能选相邻的,然后使得这个子序列的价值最大。这个跟那个小偷偷盗差不多,不能选相邻一家的。然后就是每个字符串有两个状态,选或者不选, f [ i ] [ 2 ] f[i][2] f[i][2]中分别表示前 i i i个字母中不选、选第 i i i个字母的最大价值,可以推导出方程来 f [ i ] [ 0 ] = m a x ( f [ i − 1 ] [ 0 ] , f [ i − 1 ] [ 1 ] ) , f[i][0]=max(f[i-1][0],f[i-1][1]), f[i][0]=max(f[i−1][0],f[i−1][1]), f [ i ] [ 1 ] = f [ i − 1 ] [ 0 ] + s t r [ i ] − ′ a ′ + 1 f[i][1]=f[i-1][0]+str[i]-\ 'a'\ +1 f[i][1]=f[i−1][0]+str[i]− ′a′ +1最后的结果就是从 f [ n ] [ 0 ] f[n][0] f[n][0]和 f [ n ] [ 1 ] f[n][1] f[n][1]中选一个最大的出来就行了。
题目描述:
给定一个仅含小写字母的字符串 s,假设 s 的一个子序列 t 的第 i 个字符对应了原字符串中的第 pi个字符。我们定义 s 的一个松散子序列为:对于 i>1 总是有 pi−pi−1≥2。设一个子序列的价值为其包含的每个字符的价值之和(a∼z 分别为 1∼26)。求 s 的松散子序列中的最大价值。输入格式
输入一行包含一个字符串 s。输出格式
输出一行包含一个整数表示答案。数据范围
对于 20% 的评测用例,|s|≤10;
对于 40% 的评测用例,|s|≤300;
对于 70% 的评测用例,|s|≤5000;
对于所有评测用例,1≤|s|≤106,字符串中仅包含小写字母。输入样例:
azaazaz
输出样例:
78
示例代码:
#include <cstdio>
#include <cstring>
#include <iostream>using namespace std;const int N = 1e6+10;int n;
char str[N];
int f[N][2];int main()
{scanf("%s", str+1);n = strlen(str+1);for(int i = 1; i <= n; ++i){f[i][0] = max(f[i-1][0], f[i-1][1]);f[i][1] = f[i-1][0] + str[i] - 'a' + 1;}cout << max(f[n][0], f[n][1]) << endl;return 0;
}
相关文章:
算法刷题day14
目录 引言一、平均二、三国游戏三、松散子序列 引言 今天做了三道新题,类型是贪心、枚举、DP,不是特别难,但是努力一下刚好能够够得上,还是不错的,只要能够一直坚持下去,不断刷题不断总结,就是…...
个性签名大全
只许一生浮世清欢愿我以孤独作为铠甲,自此不再受伤愿我是阳光,明媚而不忧伤我不敢太勇敢太执着太骄傲,我怕失去开始你是我的天使,最后你是我的唯一姐的霸气,无人能比,哥的傲气,无人能朋唯有万事…...
前端常用代码整理(不断更新中)— js,jquery篇(2)
目录 1.随机生成字符串 2.删除数组中重复元素 3.RGB到十六进制转换机制 4.打乱一个数组,重新组合 5.获取两个日期的时间间隔 (天数) 6.获取当天属于今年的第几天 7.截取字符串长度,超过部分显示为 ... 8.判断数组是否为空 9.英文句子首…...
普中51单片机学习(六)
点亮第一个LED LED相关知识 LED,即发光二极管,是一种半导体固体发光器件。工作原理为:LED的工作是有方向性的,只有当正级接到LED阳极,负极接到LED的阴极的时候才能工作,如果反接LED是不能正常工作的。其原理图如下 …...
visual studio注册码
最近在研究c/c 安装visual studio 需要注册 技术博客http://idea.coderyj.com/ 注册码 Visual Studio 2022(VS2022)激活码: Pro(专业版): TD244-P4NB7-YQ6XK-Y8MMM-YWV2J Enterprise(企业版): VHF9H-NXBBB-638P6-6JHC…...
Studio One 6.5下载安装激活图文教程
Studio One 6.5是由PreSonus公司打造一款功能强大的数字音乐创作软件,不仅为用户们提供了制作、混合、掌握和执行所有操作,还提供了简洁直观的主界面,因此使用起来也是十分的简单,就算是初学者也可以快速的上手使用起来࿰…...
Kubernetes(K8S)集群部署实战
目录 一、准备工作1.1、创建3台虚拟机1.1.1、下载虚拟机管理工具1.1.2、安装虚拟机管理工具1.1.3、下载虚Centos镜像1.1.4、创建台个虚拟机1.1.5、设置虚拟机网络环境 1.2、虚拟机基础配置(3台虚拟机进行相同处理)1.2.1、配置host1.2.2、关闭防火墙1.2.3…...
流畅的Python(十)-序列的修改、散列和切片
一、核心要义 以第九章定义的二维向量为基础,定义表示多为向量的Vector类。该类将支持如下功能: 1. 基本的序列协议 2. 适当的切片支持,且返回的是新Vector实例 3.综合各个元素的值计算散列值 4.格式化展示 二、代码示例 1、前情提要 …...
TCP/IP五层各层协议详解
TCP/IP协议栈是网络通信的基础,它由五层协议组成,分别是物理层、数据链路层、网络层、传输层和应用层。以下是对各层协议的详细解释: 1. 物理层(Physical Layer):该层负责传输比特流,主要定义传…...
MySQL 基础知识(九)之视图
目录 1 视图的介绍 2 视图算法 3 创建视图 4 查看视图结构 5 修改视图 6 删除视图 7 参考文档 1 视图的介绍 视图是一张并不存储数据的虚拟表,其本质是根据 SQL 语句动态查询数据库中的数据。数据库中只存放了视图的定义,通过 SQL 语句使用视图时…...
算法之力扣数青蛙
题目连接 文章目录 题目解析算法原理第一步第二步第三步第三步第四步指向o 代码讲解代码实现 题目解析 先给大家来讲解一下这个题目的意思吧,这个题目是说呢给你一个蛙叫的字符串让你去设计一个算法求出发出这种蛙叫最少需要几只青蛙。比如说第一个样例发出这种叫声…...
【后端高频面试题--Nginx篇】
🚀 作者 :“码上有前” 🚀 文章简介 :后端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 后端高频面试题--Nginx篇 往期精彩内容什么是Nginx?为什么要用Nginx?为…...
TiDB 在医疗保障信息平台的应用实践
文章介绍了 TiDB 在医疗保障信息平台中的应用。东软医保云应用管理平台通过与 TiDB 联合,成功满足了医疗保障业务中高并发、实时性和复杂查询的要求。在某地市医疗保障信息平台的实践中,TiDB 分布式数据库有效实现了在线交易和实时分析服务,日…...
支付交易——跨境交易
摘要 老王兢兢业业经营生意多年,一步步从小杂货店做到现在,成立大型贸易公司。在做大做强的过程中,老王觉得国内市场已经饱和,竞争处处是红海。老王留意海外很多年了,决定走出去,转向海外:将国外的商品引进…...
上位机图像处理和嵌入式模块部署(上位机主要功能)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 目前关于机器视觉方面,相关的软件很多。比如说商业化的halcon、vision pro、vision master,当然也可以用opencv、pytorch自…...
【前端工程化面试题】webpack的module、bundle、chunk分别指的是什么?
首先从语法方面 在配置文件中有 module 这个配置项,里面有 rules 选项用来配置各种 loader,还有其他各种选项,参考官网。bundle 和 chunk 在配置文件中是没有这个选项的,但是会出现在配置的值中。 module 模块 指单个文件…...
软件实例分享,家具生产出库管理系统软件教程
软件实例分享,家具生产出库管理系统软件教程 一、前言 以下软件程序教程以 佳易王家具行业生产出库管理系统软件V16.1为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 销售管理——产品状态查询变更,可以根据生产进度变更…...
[uniapp的页面传参]详细讲解uniapp中页面传参的传递方式和接受方式 使用案例 代码注释
目录 一、传递方式1. URL传参2. Storage传参3. Vuex传参4.api传参eventChannel 二、接受方式1. URL传参2. Storage传参3. Vuex传参4.api传参eventChannel 三、使用案例四.提醒 在uniapp中,页面传参是非常常见的需求。本文将详细讲解uniapp中页面传参的传递方式和接受…...
Python实现时间序列分析霍尔特季节性平滑模型(Holt算法)项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 霍尔特季节性平滑模型是指数平滑技术的一种扩展形式,由E. S. Holt和P. R. Winters分别独立…...
Rokid Station 进fastboot
前一阵子手里的station开不开机了,反复重启,摸索出进fastboot的方法: 关机状态下同时按电源键下面的确认键(○键),指示灯会进入白色常亮状态,插入电脑会在设备管理器内显示DNL设备(…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
