2024.10.8 test

news/2024/10/8 19:15:16/文章来源:https://www.cnblogs.com/Simon-Gao/p/18452311

nf #34

A

定义两个长度相等的数列相似,当且仅当每个下标对应值在两个数列中的排名相等。
对于一个长 \(n\) 的排列,定义 \(f(A,k)\) 表示有多少长 \(k\) 的排列和 \(A\) 的至少一个子序列相似。
排列 \(A\) 的值是 \(\sum_{k=1}^n [f(A,k)=C_n^k]\)。给出一个排列,有若干位置待定,求值最大且字典序最小的排列。
\(n\le 20\)

\(f(A,k)=C_n^k\) 的含义是:每个子序列都是两两不相似的,所以能贡献的 \(k\) 一定是 \([n-t,n]\) 的形式。
考虑从 \(k=n-1\) 开始,注意到,合法的排列满足序列中相邻的数值域上不连续。
\(k=n-2\) 的话,序列中不存在相邻且差 \(\le k\) 的,且连续的数位置的差 \(>k\)
进一步的,这个限制有一点丑,考虑合并成一条式子:\(\forall i\neq j,|p_i-p_j|+|i-j|> k\) 即满足条件。
证明的话从 \(k=n-1\) 开始,相邻的如果也连续,那么删除他们两中一个都是等价的。
进一步,我们删了一个之后再删一个数,还是要满足相邻的不连续,就有了上面的式子。
这个限制非常苛刻,我们考虑直接爆搜通过。

B

\(n\) 个物品,有重量 \(w\) 和价值 \(v\)\(q\) 次询问,背包大小为 \(m\),对于每次询问,你不断选择物品直到背包正好装满,求最大收益和达成最大收益的方案数,即物品选择的顺序需要被考虑。
\(n,w,q\le 100,m\le 10^9\)

由于 \(w\) 比较小,所以可以被转移的不多,而 \(m\) 很大,所以我们考虑矩阵快速幂。
\(f_i,g_i\) 表示当前选了 \(i\) 重量,方案数以及最大收益的值,转移枚举上一个选了什么。
但是,我们怎么知道哪些转移是最大收益的呢?考虑矩阵里直接记一个双元组 \((f,g)\)
对于双元组我们可以定义新运算,设 \((f_1,g_1)+(f_2,g_2)=([g_1\ge g_2]\cdot f_1+[g_2\ge g_1]\cdot f_2,\max(g_1,g_2))\)
\((f_1,g_1)\times (f_2,g_2)=(f_1\times f_2,g_1+g_2)\),而矩乘就是 \(C_{i,j}=\sum_{k=1}^n A_{i,k}*B_{i,k}\)
其实,只需要把矩阵优化理解为倍增优化 dp 即可。
最后,我们是向量乘矩阵,把所有 \(k\)\(T^k\) 预处理出来,复杂度是 \(w^3\log m+w^2n\log m\)

C

\(n\) 个位置,\(q\) 次询问,每次给出一个起始点,然后每次可以向左或向右扩展 \(1\)
\(m\) 次收益,诸如若第 \(x\) 次拓展是 \(p\),则可以获得 \(w\) 的收益。问最大收益。
\(n\le 10^9,m,q\le 10^9\)

收益的形式很丑陋,根据 \(s,p\) 的关系写成两种区间:\([p-x+1,p],[p,p+x-1]\) 代表当前区间形式。
那么我们要选出若干包含关系的区间,且 \(w\) 的和最大。
如果是单次询问,那么可以把左端点排序了,右端点相当于一个 LIS 的形式。
多次询问的话考虑把所有区间都并起来算,相同 \(p\) 的一对区间事实上最多选一个所以互不影响。
对于每个询问呢,我们考虑扫描线,如果 \(f_i\) 表示以 \(i\) 结尾的答案,然后相当于求若干 \(f_i\) 最大值。
这个容易计算的。
这题的话呢相当于转化为 LIS 模型。

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

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

相关文章

实验2 C语言分支与循环基础应用编程-1

任务一#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 5 #define N1 397 #define N2 476 #define N3 21int main() {int cnt;int random_major, random_no;srand(time(NULL)); // 以当前系统时间作为随机种子cnt = 0;while(cnt &…

面试-前端基础速刷-Vue

1. Vue中computed和watch的区别 两者用途不同啊!computed用于计算产生新的数据,watch用于监听现有数据。 computed有缓存,methods没有缓存。 computed有点儿像工厂模式(产生新的东西),watch像发布订阅模式。(是我目前的知识盲区) 2. Vue组件通讯有几种方式,尽量全面❗…

宝塔平替:1Panel-新一代的 Linux 服务器运维管理面板(附优惠码/推荐码)

什么是1Panel 1Panel是一款开源,现代化的新一代的 Linux 服务器运维管理面板!1Panel可以帮你实现的功能: 高效管理:用户可以通过 Web 图形界面轻松管理 Linux 服务器,实现主机监控、文件管理、数据库管理、容器管理等功能; 快速建站:深度集成开源建站软件 WordPress 和 …

大模型应用开发初探 : 基于Coze创建Agent

Coze(扣子)是字节跳动公司开发的新一代AI应用开发平台,使用这个AI应用开发平台,无论你是否有编码基础,都可以快速搭建基于大语言模型的各类AI Bot,还可以将Bot发布到其他渠道。对于一个AI Agent而言,最重要的能力就是任务规划、调用工具、知识库 和 记忆能力,而这些能力…

了解final关键字在Java并发编程领域的作用吗?

在Java并发编程领域,final关键字扮演着一个至关重要的角色。虽然很多同学熟悉final用于修饰变量、方法和类的基本用法,但其在并发环境中的应用和原理却常常被忽视。final关键字不仅仅是一个简单的修饰符,它在多线程编程中确保对象状态的可见性和不变性,这对于构建线程安全的…

20222325 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容缓冲区溢出基本知识:堆栈、函数调用。 shellcode技术以及其在各平台的运用与防御。 BOF攻击防御技术。2.实验目标 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含…

用AI构建小程序可行吗?

AI工具在软件开发中扮演着越来越重要的角色,它可以帮助开发者提高效率、增强软件功能、降低开发门槛。通过合理选择和应用AI工具,可以显著提升软件开发的质量和效率。随着移动互联网的快速发展,多端应用的需求日益增长。为了提高开发效率、降低成本并保证用户体验的一致性,…

PyQt5 使用 QLabel 实现图像 360度 不间断旋转

PyQt5 使用 QLabel 实现图像 360度 不间断旋转 当我们需要实现让一个图像 360度 旋转时,比如:音乐播放器中播放时,歌曲封面的旋转效果,你可以尝试使用下面的方法 代码结构 本文中全部代码全在test_QLabel_whirling.py这一个文件中编码,步骤中有变动的地方会注释标注,无改…

systemverilog笔记

变量类型变量名 状态数 是否带符号 比特数logic 4 无 1bit 2 无 1byte 2 有 8shortint 2 有 16int 2 有 32longint 2 有 64integer 4 有 32time 4 无 64$isunknown(表达式):在表达式任意位出现X或者Z时返回1。 数组 数组初始化 使用单引号加大括号数组遍历 $size(数组)会返回

DSP概述及应用——TMS320DM6437ZDU4、TMS320DM6437ZWT6、TMS320DM6437ZWT7数字媒体处理器

TMS320DM6437采用基于超标量架构的C64x+内核,具有高效的乘法累加单元和多格式指令集,能够在单个时钟周期内执行两条指令,大大提高了运算速度和效率。概述:TMS320DM6437是一款DSP芯片,具有强大的处理能力和丰富的功能模块。 TMS320DM6437采用基于超标量架构的C64x+内核,具…

csp-s模拟10

rank 31,垫底了,T1 0pts,T2 18pts,T3 0pts,T4 50pts 状态有点不好,策略有问题,T4是可以切的,但是不知道为什么弃了。T1不会线性基寄。T3 奇怪结论题,T2 结论题。 在猜结论上还是不行。 T1 欧几里得的噩梦 用到了线性基线性无关的性质,将两个数连边,把环去掉,并查集判…

Kubernetes的Pod调度:让你的应用像乘坐头等舱!

一、Kubernetes 中 Pod 调度的重要性 在 Kubernetes 的世界里,Pod 调度就像是一个繁忙的交通指挥官,负责把小车(也就是我们的 Pod)送到最合适的停车位(节点)。调度不仅关乎资源的合理利用,还关乎应用的“生死存亡”,下面让我们来看看为什么调度这么重要。资源优化: 想象…