Day1 省选衔接题 思路总结

Day1 省选题 思路


取数

题面1
可反悔的贪心。我们开一个双向链表记录此时每个数的前/后一个数是什么。一个简单但不一定正确的贪心策略即为:每次都取走当前值最大的且可取的数,并更新列表。考虑如何使这个贪心思路正确。

p r e x pre_x prex 表示 x x x 的前一个元素, n x t x nxt_x nxtx 表示 x x x 的后一个元素, w ( x ) w(x) w(x) 表示 x x x 的值。则在取走 x x x 后,显然 p r e x , n x t x pre_x,nxt_x prex,nxtx 在这之后都不能被选取。**但如果发现选择 p r e x , n x t x pre_x,nxt_x prex,nxtx 会比只选 x x x 更优呢?**考虑这个贪心每轮都至少新挑出一个元素出来,那么在选择 x x x 后放弃 x x x 选择了 p r e x , n x t x pre_x,nxt_x prex,nxtx,可以理解是将 x x x 替换为后两者中的一个(反悔操作),并新选出了后两者中的另一个。而将 x x x 替换为 p r e x , n x t x pre_x,nxt_x prex,nxtx 的收益为 w ( p r e x ) + w ( n x t t ) − w ( x ) w(pre_x)+w(nxt_t)-w(x) w(prex)+w(nxtt)w(x),所以我们就可以将这个值也当作一个可选的点,继续进行贪心。

细节部分,在选择了 x x x 后,可以将链表中的 x x x 直接替换为 p r e x , n x t x pre_x,nxt_x prex,nxtx 两点综合起来。具体地,在计算完 x x x 的贡献后,标记 n x t x , p r e x nxt_x,pre_x nxtx,prex 这两个单独的点分别标记为已选,然后就可以更新 w ( x ) ← w ( p r e x ) + w ( n x t t ) − w ( x ) w(x)\gets w(pre_x)+w(nxt_t)-w(x) w(x)w(prex)+w(nxtt)w(x)。因为 n x t x , p r e x nxt_x,pre_x nxtx,prex 都不能再单独被选,所以按照正常的链表删除操作删除 p r e x , n x t x pre_x,nxt_x prex,nxtx 两个单独的点。

取数2

在这里插入图片描述
题意即为:从 n n n 个集合中各选出一个数求和,求出前 k k k 大的和。为了顺应大家的习惯,这里将 n , k n,k n,k 的意义调换了。

显然最大的取法就是从每个集合中取一个最大值求和,我们设这个最优值为 a n s ans ans。考虑其可能的后几个略小一些的状态。我们将每个集合按照最大值减次大值的差从小到大排序,每个集合内部按从大到小排序。假设当前状态 { i , j , w } \{i,j,w\} {i,j,w} 表示枚举到第 i i i 个集合中的第 j j j 个数,考虑将 a n s ans ans 中第 i i i 个集合取的数更换为 j j j更换后的答案为 w w w。令 c ( i , j ) c(i,j) c(i,j) 表示集合 i i i 中第 j j j 大的值,最初始的状态即为 { 1 , 2 , a n s − c ( 1 , 1 ) + c ( 1 , 2 ) } \{1,2,ans-c(1,1)+c(1,2)\} {1,2,ansc(1,1)+c(1,2)}。对于每个状态会有三个可能的分支:

  • 如果 j < s i z i j<siz_i j<sizi,则一种可能的选择即为放弃更换为 j j j,考虑更换为 j + 1 j+1 j+1。新的状态为 { i , j + 1 , w − c ( i , j ) + c ( i + j ) } \{i,j+1,w-c(i,j)+c(i+j)\} {i,j+1,wc(i,j)+c(i+j)}
  • 如果 i i i 不是最后一个集合:
    • 一种可能的选择即为决定更换为 j j j,开始考虑 i + 1 i+1 i+1 集合的选择。新的状态为 { i + 1 , 2 , w − c ( i + 1 , 1 ) + c ( i + 1 , 2 ) } \{i+1,2,w-c(i+1,1)+c(i+1,2)\} {i+1,2,wc(i+1,1)+c(i+1,2)}
    • 另外,如果 j = 2 j=2 j=2,则一种可能的选择即为放弃更换 i i i 中的元素,直接考虑 i + 1 i+1 i+1 集合的选择。新的状态为 { i + 1 , 2 , w − c ( i , 2 ) + c ( i , 1 ) − c ( i + 1 , 1 ) + c ( i + 1 , 2 ) } \{i + 1,2,w - c(i,2) + c(i,1) - c(i+1,1) + c(i+1,2)\} {i+1,2,wc(i,2)+c(i,1)c(i+1,1)+c(i+1,2)}

开一个优先队列记录这些状态,从中取 k k k​ 轮即为答案。

文件列表

在这里插入图片描述在这里插入图片描述
可以说是 C++ 语法题

直接按照题意模拟即可,注意文件(夹)名可能会重复。

巧置挡板

在这里插入图片描述在这里插入图片描述

暴搜+剪枝。由于最终每一个矩形中都有且仅有一个 1 1 1,我们不妨在搜索的过程中,每次枚举所有包含某一个 1 1 1 的矩形。状态可以这样设计,我们用一个长度为 n n n 的序列来表示一条从右上到左下的单调分界线(序列中每一个元素表示该行分界线的位置),分界线左边为搜索过的区域,右边为未搜索的区域。这个状态的答案将表示完成右侧区域最少的边数。

为什么是单调的分界线?在任意一种分隔方案中,都一定存在一种矩形放置顺序,使得每次放置之后,分界线仍然是单调的。所以即使是仅考虑单调的分界线状态,也一定可以搜索到所有状态,这样可以简化状态降低复杂度。然而这样复杂度仍然较高。这里给出几种:剪枝的手段:

  • 状态可以记忆化,哈希之后用 map 存储;
  • 假设某一行有一个折角(分界线相比上一行发生左移),如果折角的右下方没有一个 1 1 1,则一定会出现空矩形,不合法;
  • 枚举当前矩形时, 1 1 1 的个数超过 1 1 1 后可以直接停止,不合法。

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

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

相关文章

Path Aggregation Network for Instance Segmentation

PANet 摘要1. 引言2.相关工作3.框架 PANet 最初是为 proposal-based 实例分割框架提出来的&#xff0c;mask 是实例的掩码&#xff0c;覆盖了物体包含的所有像素&#xff0c;proposal 在目标检测领域是可能存在目标的区域。在实例分割中&#xff0c;首先利用RPN(Region Proposa…

深入理解Java中的字段与属性的区别

1、Java中的属性和字段有什么区别&#xff1f; 答&#xff1a;Java中的属性(property)&#xff0c;通常可以理解为get和set方法。 而字段(field)&#xff0c;通常叫做“类成员”&#xff0c;或 "类成员变量”&#xff0c;有时也叫“域”&#xff0c;理解为“数据成员”&…

c语言字符串函数(模拟实现)

用递归的方式完成strlen int my_len(const char* str) { static int count; assert(str);//能够判断为不为空指针 if (*str ! \0) { my_len(str); return count; } else { count 0; return count;;//真正的strlen是unsi…

练习题(2024/4/10)

1. 删除有序数组中的重复项 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元…

2022年蓝桥杯省赛——直线

目录 题目链接&#xff1a;11.直线 - 蓝桥云课 (lanqiao.cn) 题目描述 思路 代码思路如下 代码实现 坑来喽~~ 导致这个BUG的原因&#xff01;&#xff01;&#xff01; 总结 整体的 两种b的情况对比数据 题目链接&#xff1a;11.直线 - 蓝桥云课 (lanqiao.cn) 题目描…

一文搞懂计算机视觉模型

计算机视觉&#xff0c;这个曾经让科学家们望而生畏的领域&#xff0c;如今在深度学习的加持下&#xff0c;正迎来前所未有的发展。你是否好奇&#xff0c;是哪些深度学习模型让计算机拥有了“慧眼”&#xff1f;让我们一起揭开这些模型的神秘面纱。 /1 卷积神经网络 (CNNs)。…

分库,分表,分区,分片

MySQL&#xff1a; 是一个开源的关系型数据库管理系统&#xff0c;主要用于存储和管理数据。它提供了命令行接口&#xff0c; SQLyog&#xff1a; 是一个图形化的客户端软件&#xff0c;专门用于管理和操作MySQL数据库。 它提供了一个直观的用户界面&#xff0c;简化了MySQL数据…

JVM面试整理--对象的创建和堆

文章目录 对象的创建过程是怎样的?对象在内存中的结构是怎样的&#xff08;专业的叫法&#xff1a;对象的内存布局&#xff09;对象在内存分配时使用的哪种方式&#xff08;有的地方也称为&#xff1a;分配算法&#xff09;知道什么是“指针碰撞”吗&#xff1f;知道什么是“空…

LeetCode 80—— 删除有序数组中的重复项 II

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 让 index指向删除重复元素后数组的新长度&#xff1b;让 st_idx 指向重复元素的起始位置&#xff0c;而 i 指向重复元素的结束位置&#xff0c;duplicate_num代表重复元素的个数&#xff1b;一段重复元素结束后&am…

php校园活动报名系统vue+mysql

开发语言&#xff1a;php 后端框架&#xff1a;Thinkphp/Laravel 前端框架&#xff1a;vue.js 服务器&#xff1a;apache 数据库&#xff1a;mysql 运行环境:phpstudy/wamp/xammp等本选题则旨在通过标签分类管理等方式&#xff0c;管理员&#xff1b;首页、个人中心、学生管理、…

如何从零开始训练一个语言模型

如何从零开始训练一个语言模型 #mermaid-svg-gtUlIrFtNPw1oV5a {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gtUlIrFtNPw1oV5a .error-icon{fill:#552222;}#mermaid-svg-gtUlIrFtNPw1oV5a .error-text{fill:#5522…

Redis 缓存穿透、缓存击穿、缓存雪崩区别和解决方案

缓存穿透 什么是缓存穿透&#xff1f; 缓存穿透说简单点就是大量请求的 key 是不合理的&#xff0c;根本不存在于缓存中&#xff0c;也不存在于数据库中 。这就导致这些请求直接到了数据库上&#xff0c;根本没有经过缓存这一层&#xff0c;对数据库造成了巨大的压力&#xf…

2、Qt UI控件 -- qucsdk项目使用

前言&#xff1a;上一篇文章讲了qucsdk的环境部署&#xff0c;可以在QDesigner和Qt Creator中看到qucsdk控件&#xff0c;这一篇来讲下在项目中使用qucsdk库中的控件。 一、准备材料 要想使用第三方库&#xff0c;需要三个先决条件&#xff0c; 1、控件的头文件 2、动/静态链…

【C++造神计划】定义常量

1 宏常量&#xff08;macro constants&#xff09; 使用预处理器指令 #define 可以将那些经常使用的常量定义为你自己取的名字而不需要借助于变量 编译器在遇到 #define 指令的时候&#xff0c;做的只是把任何出现这些常量名的地方替换成它们被定义为的代码 #define 指令不是…

rollup 插件架构-装饰器模式增添插件性能分析

文章目录 输入 rollup 配置根据用户配置开启插件性能分析性能分析函数实现分级输出结果装饰器模式拓展组件 输入 rollup 配置 初始化计时器&#xff0c;构建完成时输出每个阶段的耗时、内存占用等信息,会 wrapper 相应 hook 方法&#xff0c;添加计时相关功能 initialiseTime…

记录vue之npm run serve报错SET NODE_OPTIONS

> vue-antd-pro3.0.0 serve > SET NODE_OPTIONS--openssl-legacy-provider && vue-cli-service servesh: SET: command not found 一定要注意&#xff1a;将 SET NODE_OPTIONS–openssl-legacy-provider && 删除即可

17 - Games101 - 笔记 - 材质与外观

**17 **材质与外观 材质与BRDF 自然界中的材质&#xff1a;丝绸、头发、蝴蝶翅膀表面、寿司表面等等 图形学中的材质&#xff1a;同一个模型之所以渲染出不同结果的原因就是因为材质。在图形学中是给不同的物体指定不同的材质&#xff0c;知道它们如何和光线作用后就能正确的…

C++11 数据结构0 什么是 “数据结构“?数据,数据对象,数据元素,数据项 概念。算法的基本概念 和 算法的度量,大O表示法,空间换时间的代码

数据&#xff1a; 是能输入计算机且能被计算机处理的各种符号的集合。数值型的数据&#xff1a;整数和实数。非数值型的数据&#xff1a;文字、图像、图形、声音等。 数据对象&#xff1a; 性质相同的 "数据元素" 的集合 例如一个 int arr[10], Teacher tea[3]; 数…

汽车4S行业的信息化特点与BI建设挑战

汽车行业也是一个非常大的行业&#xff0c;上下游非常广&#xff0c;像主机厂&#xff0c;上游的零配件&#xff0c;下游的汽车流通&#xff0c;汽车流通之后的汽车后市场&#xff0c;整个链条比较长。今天主要讲的是汽车流通&#xff0c;汽车4S集团。一个汽车4S集团下面授权代…

MySQL高级篇(存储引擎InnoDB、MyISAM、Memory)

目录 1、存储引擎简介 1.1、查询建表语句&#xff0c;默认存储引擎&#xff1a;InnoDB 1.2、查看当前数据库支持的存储引擎 1.3、创建表&#xff0c;并指定存储引擎 2、 存储引擎-InnoDB介绍 2.1、存储引擎特点 3、MyISAM存储引擎 4、Memory存储引擎 5、InnoDB、MyISAM、Memory…