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。

随机推荐

  1. python私有变量和方法

    python私有变量和方法 1,私有变量和私有方法无法被继承 2,私有变量和私有方法可以放在普通方法(实例方法)里面被子类继承 class A: def __init__(self, name): s ...

  2. Jmeter汉化成中文版

    1.jmeter安装成功后,默认启动是英文版 2.汉化方法 到jmeter安装目录下找到\bin\jmeter.properties,右键记事本打开定位"#language=en" ...

  3. 【Vue】HutoolExcel导出

    最近写Excel导出功能,发现需求有点复杂,这里整理一下思路和解决方案 一.需求背景: 老系统改造,功能和代码是现成的,预览了一下内容: 第一个是有特定样式,比如首行标题,以及红色的列名称 第二个,导 ...

  4. 【Java】用户在线人数统计的简单实现

    一.需求效果: 就是进入首页时能查看在线人数,没有特定要求,那我就不刷这个接口了 就进入首页加载一次 二.实现思路: 思路参考博客: https://blog.csdn.net/GitLuckyd/a ...

  5. 【TypeScript】02 面向对象

    [联合类型] 联合类型(Union Types)可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值. 注意:只能赋值指定的类型,如果赋值其它类型就会报错. var val:strin ...

  6. 顶级围棋AI被发现漏洞:“超人类人工智能”还有很长的路?

    原文地址: https://www.bjnews.com.cn/detail/1720537986168936.html 参考资料: (1)Can AI be superhuman? Flaws in ...

  7. NVIDIA公司官宣最新最高性能的GPU芯片及平台 —— Blackwell GPU

    官宣视频: https://www.youtube.com/watch?v=bMIRhOXAjYk 相关: https://baijiahao.baidu.com/s?id=1793921686210 ...

  8. mpi4py 官方使用手册

    一直好奇mpi4py的使用手册在哪,找了好久最后在anaconda上发现了线索: https://anaconda.org/conda-forge/mpi4py Home: https://mpi4p ...

  9. 代码随想录Day6

    454.四数相加Ⅱ 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, j, k ...

  10. Linux查看硬件信息超强命令sar,以及可视化工具ksar

    一.概述 sar(System Activity Reporter,系统活动情况报告)是Linux下系统运行状态统计工具,可从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情况.磁盘 ...