XYD1006CSPS
T1 密钥 [关键结论,模拟,枚举]
Description
给定两个长度为 \(n\) 的 \(01\) 序列 \(a\),\(b\),每个位置都有一个权值 \(c\),
每次操作可以将 \(a\) 中一个位置取反,花费为操作后 1 的位置的权值之和,
求将 \(a\) 变成 \(b\) 最小花费。
\(n\le 5\times 10^3\)。
Solution
下文将以类似 \(0/1\) 的形式表示 \(a\) 为 \(0\),\(b\) 为 \(1\)。
手模样例加推理发现一个关键性质,对于 \(1/0\) 和 \(0/1\) 这两种形式,肯定先把 \(1/0\) 按照权值从大到小变成 \(0/0\),再把 \(0/1\) 从小到大变成 \(1/1\),很好理解,证明简单,这里不再赘述。
但是有种特殊的形式 \(1/1\),可以在上面的操作中,先变为 \(0/1\),最后再变回 \(1/1\),以减小花费,但是我们并不能直接算出要变哪几个 \(1/1\),但是可以知道的是,这几个 \(1/1\) 一定是所有 \(1/1\) 中最大的几个。
于是考虑枚举前几个 \(1/1\) 需要和 \(1/0\) 合起来排序变为 \(0/1\) 和 \(0/1\),再和 \(0/1\) 合起来排序变为 \(1/1\),即可。
排序可以用 set 维护,也可以用双指针,但不能每次都 sort()。
Summary
这题考察了观察和推理能力,以及一些码力,赛时需要多手模样例,多思考,推性质。
T2 科研基地 [树形背包DP]
Description
给定一棵带权树,求一个连通块,使得不在连通块内的点不超过 \(k\) 个,且连通块所有边权之和乘二最小。
\(n\le 10^4\),\(k\le 20\)。
Solution
由于 \(k\) 很小,而且是个类似容量的东西,所以我们考虑 树形背包。
设 \(f(u,i,j)\) 表示在以 \(u\) 为根的子树中,考虑前 \(i\) 个儿子,有 \(j\) 个点不选的最小答案,转移如下,
\(f(u,i,j)=\max(f(u,i-1,j-t)+f(v,cntson_v,t)+w_{u,v}\times 2)\),
其中 \(i\) 这一维用滚动数组滚掉即可。
那么统计总答案只需要枚举每个点的 \(f\) 即可,这样为什么不会漏掉答案呢,为什么不需要 换根DP 呢,因为答案一定是个连通块,所以它一定在以某个点为根的子树,因此这样一定会枚举到最优答案。
Summary
普通的 树形背包 题,重点是最后统计答案时的一个小 trick。
随机推荐
- 使用 useRequestEvent Hook 访问请求事件
title: 使用 useRequestEvent Hook 访问请求事件 date: 2024/7/23 updated: 2024/7/23 author: cmdragon excerpt: 摘 ...
- 关于netty 一些使用细节
netty 的客户端通常是websoket 但是为了演示也可以用netty做客户端, Channel:可以被理解为数据传输的通道. Pipeline:可以被视为一个由多个工序组成的流水线,负责将数 ...
- mybatis关于大于小于:元素内容必须由格式正确的字符数据或标记组成。
首先是原因: mybatis中< >这两个符号会被识别为标签的开始和结束,用了就会报解析的错误 会报错类似下面这些 1.元素内容必须由格式正确的字符数据或标记组成. 2.Error cre ...
- docker 部署redis 并在外部访问 docker命令
docker search redis //搜索redis版本 docker pull redis //拉取最新版本 docker run -d --name redis -p 自定义端口:6379 ...
- Linux podman容器实验
要求 1.登录到指定的镜像仓库拉取镜像 2.以普通用户contsvc运行 3.配置 systemd-journald 服务,要求永久保留日志数据(物理机,创建文件mkdir /var/log/jour ...
- Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"解决yum下载报错
报错信息 │ (SSH client, X server and network tools) │ │ │ │ ⮞ SSH session to root@192.168.117.166 │ │ • ...
- 【SpringMVC】 Controller接收深度复杂对象封装不到的问题
首先来看数据结构的定义: 一个Form对象,然后里面有一个排版日期对象的List集合 排班集合的每个元素中又有一个String集合 在前端的Post请求中可以看到这个String集合是传递了的 但是D ...
- PID入门视频课程分享: 单片机 > PID课程:一堂课帮你搞定PID算法 > pid算法
推荐入门视频: <PID课程:一堂课帮你搞定PID算法> 收费版: http://t.elecfans.com/v/1399.html 免费版: 地址: https://www.bilib ...
- ubuntu 配置NTP时间服务器&&定时同步本地时间
Ubuntu系统: NTP时间服务器的安装: 服务器安装命令: sudo apt-get install ntp NTP服务配置,设置为本地时间服务器,屏蔽默认server,服务器层级设为10: vi ...
- mujoco_py.cymj.GlfwError: Failed to initialize GLFW
安装mujoco后运行可视化界面代码报错: mujoco_py.cymj.GlfwError: Failed to initialize GLFW 解决方法: sudo apt-get install ...