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. windows terminal 添加git bash

    打开windows terminal点击设置 修改文件 找到profiles-->list添加一个节点 { "commandline": "C:\\Program ...

  2. 全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type

    全网最适合入门的面向对象编程教程:31 Python 的内置数据类型-对象 Object 和类型 Type 摘要: Python 中的对象和类型是一个非常重要的概念.在 Python 中,一切都是对象 ...

  3. 从.net开发做到云原生运维(一)——从.net framework过渡到.net core

    1. 前言 序篇讲了自己的一些感悟和经历,从这章开始就开始讲一些.net技术栈的东西了. 2. .net framework和.net core对比 .NET Framework 概述 .NET Fr ...

  4. 《Python数据可视化之matplotlib实践》 源码 第一篇 入门 第一章

    最近手上有需要用matplotlib画图的活,在网上淘了本实践书,发现没有代码,于是手敲了一遍,mark下. 第一篇    第一章 图1.1 import matplotlib.pyplot as p ...

  5. ApplicationRunner的讲解

    在开发中可能会有这样的情景.需要在容器启动的时候执行一些内容.比如读取配置文件,数据库连接之类的.SpringBoot给我们提供了两个接口来帮助我们实现这种需求.这两个接口分别为CommandLine ...

  6. 微服务全链路跟踪:jaeger集成hystrix

    微服务全链路跟踪:grpc集成zipkin 微服务全链路跟踪:grpc集成jaeger 微服务全链路跟踪:springcloud集成jaeger 微服务全链路跟踪:jaeger集成istio,并兼容u ...

  7. 2023 ICPC 杭州题解

    游记 gym F. Top Cluster std 二分答案.需要判断点权 \(\le mid\) 的点到询问点的最大距离.直径. K. Card Game 设 \(f[l,r]\) 为 \([l,r ...

  8. C语言编程-GCC编译过程

    gcc编译 预处理 ->编译->汇编->链接 预处理 gcc -E helloworld.c -o helloworld.i 头文件展开:不检查语法错误,即可以展开任意文件: 宏定义 ...

  9. C# JSON序列化指定名称

    今天在做项目时遇到了要将json对象序列化为数据库表,  结果数据库表和json对象数据类型和字段名称对不上.于是就有了一下的解决方案: 需要转化的对象 { "orgAccountId&qu ...

  10. 画流程图、状态图、时序图、甘特图的JS库-mermaid-js

    参考地址:https://github.com/mermaid-js/mermaid 原生使用方式: <!DOCTYPE html> <html> <head> & ...