模拟测试53

T1:

  我们不仅可以维护差分,还可以维护差分的差分,两次前缀和即可。

  注意区间可能延伸到矩形之外,特判一下即可。

  时间复杂度$O(n^2)$

T2:

  可以状压DP或记忆化搜索。

  记录状态为当前哪些小球被拿走了,然后逆推转移就行了。

  但是小球的颜色只有两种,我们可以将状态定义重设为剩下小球的颜色。

  这样大大减少了状态数。

  时间复杂度$O(nk2^{C_n^k})$

T3:

  DP神题。

  根据贪心思想,一条边至多会被覆盖一次。

  因为如果一条边被两条路径覆盖,从这条边两侧截开这两条路径一定能使答案更优。

  以二元组的形式进行DP,要在first尽可能小的情况下使second尽可能小。

  设$dp[i][0/1]$表示在以$i$为根的子树内,有/无向上延伸的路径的方案数。

  则对于每个节点,我们可以将所有儿子延伸上来的路径两两匹配,只有最大化匹配,first才会尽可能优。

  就用两个变量$now1$与$nxt1$和$now2$与$nxt2$分别滚动记录该节点有奇数个路径和有偶数条路径的最优值。

  $now1$初值为$inf$,$now2$初值为$0$,枚举所有儿子:

    $nxt1=min(now1+dp[y][0],now2+dp[y][1])$

    $nxt2=min(now1+dp[y][1],now2+dp[y][0])$

    $now1=nxt1,now2=nxt2$

  实质上就是对所有儿子进行匹配,求出最优方案。

  然而方案是分奇偶的,如果当前儿子中有偶数条路径,不延伸的情况更优,反之延伸的情况更优。

  然后讨论该点的限制,考虑该点是否可以向上延伸,是否必须向上延伸。

  上面的$now1$及$now2$仅考虑了子树内部,用加一调节即可。

  时间复杂度$O(n)$

原文地址:https://www.cnblogs.com/hz-Rockstar/p/11602465.html

时间: 2024-10-03 21:52:15

模拟测试53的相关文章

[CSP-S模拟测试53]题解

A.u 只涉及到区间修改可以考虑差分,然而如果每一行都差分复杂度还是过高.我们发现差分标记也是连续的(一行横着的一行斜着的),所以可以维护两个 差分的差分,扫两遍统计即可. #include<cstdio> #include<iostream> #include<cstring> using namespace std; typedef long long ll; const int N=2005; int read() { int x=0,f=1;char ch=ge

2019.9.27 csp-s模拟测试53 反思总结

这个起名方式居然还有后续?! 为什么起名不是连续的?! T1想了半天,搞出来了,结果数组开小[其实是没注意范围].T2概率期望直接跳,后来翻回来写发现自己整个理解错了期望的含义[何].T3错误想到赛道修建结果来了个错误贪心. 关于T2破罐子破摔输出k居然骗了二十分这件事…… T1u: 一开始各种想偏,维护哪种值是奇数或偶数个,考虑每次操作影响哪些值变化…这些全都跑出来了. 大概过了一个世纪那么长,突然想着能不能直接优化操作的过程啊,然后对暴力进行钻研,终于开始想到差分. 然后觉着nq的复杂度过不

微信在线信息模拟测试工具(基于Senparc.Weixin.MP)

目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具在线DEMO:http://weixin.senparc.com/SimulateTool Senparc.Weixin.MP是一个开源的微信SDK项目,地址:https://github.com/JeffreySu/WeiXinMPSDK (其中https://github.com/Jeffrey

noip模拟测试11

T1:string 第一眼秒出思路,这不就是排序那道题的加强版吗? 然而歪?解复杂度虽然是对的,但常数过大,竟被卡到70 歪?解:(实际上std写的就是这个,但据说std被卡掉了 OAO) 因为字符集很小,所以我们可以把区间排序改为区间查询和覆盖 即:先查询区间内所有字符的个数,再从左端点开始按照大小关系依次将长度为字符个数的区间修改为该字符. 期望复杂度O ( 26*mlogn ),实际复杂度O ( 26*mlogn*(巨大的常数) ) 所以需要一(feng)定(kuang)的卡常 正?解:

[考试反思]0929csp-s模拟测试55:沦陷

菜得过分. 面对T1的大板子不知所措,然后T2的贪心不小心把排序语句删了... T1这种大模板啊...其实我是觉得我能打出来的,然后先用一个小时码了一个2k. 然后做T2想贪心就出来了.十分钟码完T3暴力之后回T1打对拍瞬间爆炸. 于是又重新打了一个2k,WA0.对拍发现. 然后考试就没几分钟了交暴力走了. 不要打完就跑,记得早点对拍改进思路. T1: 的确是挺裸的线段树.离散化或者权值线段树都可以. 但是考场上两个都打出来都死了. 最后用离散化A的. 1 #include<cstdio> 2

[考试反思]1003csp-s模拟测试58:沉淀

稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使用的话,切记计算内存,一点都不能开大. T1: 直接根号筛,拿map也能过. 遍历map直接begin和end啊... 1 #include<cstdio> 2 int Cnt[202]; 3 struct hash_map{ 4 int cnt,fir[10000020],l[6666666],

csp-s模拟测试93

csp-s模拟测试93 自闭场. $T1$想到$CDQ$,因为复杂度少看见一个$0$打了半年还用了$sort$直接废掉,$T2$,$T3$直接自闭暴力分都没有.考场太慌了,心态不好. 80 02:07:34 0 03:12:11 0 03:11:53 80 03:12:11 没有前途就是垃圾趁早滚回实验二安度晚年吧. A. 序列 $CDQ$不接受反驳. B. 二叉搜索树 最简单的$Dp$都没认真想,太垃圾了,积累一个决策单调性优化$Dp$.一些看似是$n^3$的题可以通过特殊性质优化,还比如以前

模拟测试(vj)

做这份模拟测试,已经崩溃了,英文看不懂,题意理解错.到结束了只a了第一题,人生陷入了低谷,于是花了一天的时间终于把不会的弄明白了,在这里写一份总结~ T1,简单的模拟,如果打枪打中一支鸟,将这个位置设为0,并向两边扩散,注意这个位置一定要有鸟. 代码~ #include<bits/stdc++.h> using namespace std; int a[30000]; int n,m; int main() { cin>>n; for(int i=1;i<=n;i++) ci

Android单元测试与模拟测试详解

测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabricator differential 发diff时提交需要执行的单元测试,在开发流程上就可以保证远端代码的稳定性). 2. 测什么? 一般单元测试: 列出想要测试覆盖的异常情况,进行验证. 性能测试. 模拟测试: 根据需求,测试用户真正在使用过程中,界面的反馈与显示以及一些依赖系统架构的组件的应用测