前三题氵

D

给定一个由 (,?,) 组成的字符串。每个 ? 可以设定为任意括号。求有几种设定方法使得整个是合法括号序列。

套路,dp

E

给定 \(n\) 个两两不相交的长方体,对每个长方体,求有多少个长方体与其有公共面。

有一个可以大幅度优化代码麻烦程度的小技巧:因为坐标范围很小,我们直接把每个长方体拆成 \(x*y*z\) 个小立方体看就行。

对于第 \(i\) 个长方体的每个小立方体 \((a,b,c)\),让它相邻的六个小立方体都统计一下:我的相邻小立方体有来自第 \(i\) 个长方体的。这其实就等价于有公共面。

F

有 \(n\) 个东西类型为 \(0,1,2\)。

类型 \(0\) 的是罐头,无限制,有一个价值。

类型 \(1\) 的也是罐头,需要开罐器,也有一个价值。

类型 \(2\) 的是开罐器,有一个可开罐数量。

只能选 \(m\) 个东西,求最大价值和。


这题比 E 氵

考虑枚举拿的开罐器数量,同时维护此时的最大价值和。

用一个 multiset 保存当前持有的罐头。初始时把最大的 \(m\) 个类型 \(0\) 加入 multiset 并令初始价值和为它们的价值和。(赛时居然把所有类型 \(0\) 的都加入 multiset 了,一定注意是最大的m个

然后枚举拿的开罐器数量,注意开罐器一定是按照可开罐数量从大到小拿。(如果某次发现上一次的总可开罐数量已经足够开启所有罐头,就 break)

假设这次拿的开罐器可以打开 \(x\) 个罐头,接下来从上一次开罐的结尾开始,再把之后的 \(x\) 个罐头加入 multiset,同时也令当前价值和加上这 \(x\) 个罐头。

最后把 multiset 中多余的罐头去掉。(注意要考虑拿了一些开罐器)这时剩下的就是拿这么多开罐器的答案了。

每次让 \(ans\) 和维护的最大价值和取 \(\max\) 即可。

G

找出树上有多少个三个点的点组,使得不存在一条简单路径包含这点组内的三个点。

每一个符合要求的三点组 \((i,j,k)\),一定唯一存在一个结点 \(v\),使得 \((i\rightarrow v,j\rightarrow v),\;\,(j\rightarrow v,k\rightarrow v),\;\,(i\rightarrow v,k\rightarrow v)\) 这三对路径中,每一对路径都存在一个非 \(v\) 的结点重复。(说人话就是从点 \(v\) 往外辐射出去)

因此只需要考虑每一个点 \(v\),统计对应的 \((i,j,k)\) 个数,加起来就是答案。

而假设固定了点 \(v\),\((i,j,k)\) 的个数就是从 \(v\) 的每个儿子子树的规模中,任取三个相乘的和。(例如 \(v\) 有 \(4\) 个儿子,\(4\) 颗子树的规模分别为 \(2,1,1,3\),答案就是 \((2*1*1+2*1*3+1*1*3\))

如果 \(v\) 的子结点不足 \(3\) 个,对答案的贡献为 \(0\)。

“任取三个相乘的和” 这个问题可以用 DP 解:\(dp_{i,j}\) 表示前 \(i\) 个元素任取 \(j\) 个数相乘,求和是多少。时间复杂度 \(O(\)序列长度\()\)。

因此对于一个固定的结点 \(v\),它对答案的贡献可以以 \(O(sons[v])\) 的复杂度求出,\(sons[v]\) 是以 \(v\) 为根时 \(v\) 的子结点个数。

但是还有一个问题:以 \(v\) 为根时,各子结点的子树规模怎么求?其实做一遍换根 DP 就行。

总复杂度 \(O(n)\)。

其实这题用到的知识点并不超纲。赛时卡在了如何求出“任取三个相乘的和”上。

ABC 312的更多相关文章

  1. Codeforces Round #312 (Div. 2) ABC题解

    [比赛链接]click here~~ A. Lala Land and Apple Trees: [题意]: AMR住在拉拉土地. 拉拉土地是一个很漂亮的国家,位于坐标线.拉拉土地是与著名的苹果树越来 ...

  2. 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串

    写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...

  3. 【IOS】将一组包含中文的数据按照#ABC...Z✿分组

    上一篇文章[IOS]模仿windowsphone列表索引控件YFMetroListBox里面 我们一步步的实现了WindowsPhone风格的索引. 但是有没有发现,如果你要实现按照字母排序,你还得自 ...

  4. 在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }

    平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出:堆就是先进先出.下面我就常见的例子做分析: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main( ...

  5. 学习Python的ABC模块(转)

    http://yansu.org/2013/06/09/learn-Python-abc-module.html 1.abc模块作用 Python本身不提供抽象类和接口机制,要想实现抽象类,可以借助a ...

  6. 将abc的全排列输出

    #include "iostream" using namespace std; void swap(char a[],int i,int j){ char temp; temp= ...

  7. 关于String str =new String("abc")和 String str = "abc"的比较

    String是一个非常常用的类,应该深入的去了解String 如: String str =new String("abc") String str1 = "abc&qu ...

  8. linux rpm -ivh MySQL-server-5.5.31-2.el6.i686.rpm

    linux rpm 安装mysql异常: [root@localhost upload]# rpm -ivh MySQL-server-5.5.31-2.el6.i686.rpmerror: Fail ...

  9. IE9 使用document.getElementsByName("abc") 不能获取到名称相同SPAN元素

    <div name="abc"></div> <input name="abc" type="text" /& ...

  10. 经典String str = new String("abc")内存分配问题

    出自:http://blog.csdn.net/ycwload/article/details/2650059 今天要找和存储管理相关的一些知识,网上搜了半天也没有找到完善的(30%的程度都不到),没 ...

随机推荐

  1. C#对字符串进行加密解密

    首先上效果图 加解密接口 internal string ToEncrypt(string encryptKey, string str) { try { byte[] P_byte_key = // ...

  2. 机器学习-无监督机器学习-kmeans-17

    目录 1. 什么是聚类 2. 代码实现 1. 什么是聚类 无监督机器学习的一种 输入数据只有X 没有y 将已有的数据 根据相似度 将划分到不同的簇 (花团锦簇) 步骤: 随机选择k个簇的中心点 样本根 ...

  3. SpringMVC - 加载静态资源

    静态资源过滤 spring-config.xml <!-- 3,(1)让Spring MVC不处理静态资源 .(2)加载静态资源,也称为资源过滤 --> <mvc:default-s ...

  4. Nginx 配置文件备忘单

    Nginx 是用于 Web 服务.反向代理.缓存.负载平衡.媒体流等的开源软件.在这篇文章中,我将提到一些我们经常使用的 Nginx 配置. 监听端口 server { Standard HTTP P ...

  5. 聊聊x86计算机启动发生的事?

    大家好,我是呼噜噜,最近在看linux早期内核0.12的源码,突然想到一个困扰自己好久的问题:当我们按下电源键,计算机发生了什么?神秘地址0x7C00究竟是什么?操作系统又是如何被加载到硬件中的?带着 ...

  6. [转帖]存储器分级:L1 Cache 比内存和 SSD 快多少倍?

    目录 1.为什么会有存储器分级策略? 2.存储器分级策略 2.1 存储器的级别 2.2.1 L1-Cache 2.2.2 L2-Cache 2.2.3 L3-Cache 3.内存 4.SSD 和硬盘 ...

  7. [转帖]【SOP】最佳实践之 TiDB 业务写变慢分析

    https://zhuanlan.zhihu.com/p/647831844 前言 在日常业务使用或运维管理 TiDB 的过程中,每个开发人员或数据库管理员都或多或少遇到过 SQL 变慢的问题.这类问 ...

  8. [转帖]使用 TiDB 读取 TiFlash

    https://docs.pingcap.com/zh/tidb/stable/use-tidb-to-read-tiflash 本文档介绍如何使用 TiDB 读取 TiFlash 副本. TiDB ...

  9. [转帖]FIO使用说明

    FIO介绍: FIO是测试IOPS的非常好的工具,用来对磁盘进行压力测试和验证.磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类.FIO是一个可以产生很多线程或进程并执 ...

  10. [转帖]查看请求在nginx中消耗的时间

    需求:查看请求在nginx中消耗的时间,不包括程序响应时间. 1.声明日志的格式,在nginx配置文件nginx.conf里的http下添加如下内容: log_format test '$remote ...