Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

10 2020 档案

摘要:虚树dp+倍增。 构建虚树:边权为原树这条链上的最小值。 状转方程:若子节点为关键点,则此边必断,dp[x]+=w[x>son]。 否则,可以选择断这条边或在子树中自行解决,dp[x]+=min。 链上最小值,可以选择树剖维护,这里使 阅读全文
posted @ 2020-10-28 00:32 syzf2222 阅读(58) 评论(0) 推荐(0) 编辑
摘要:最近调题都好艰辛啊……(请忽略弱者的一句感叹) 虚树,为关键点及其lca构成的树,在这棵树上跑dp有时可以降低复杂度。 若我有m个关键点,以下给出虚树建树模板: st[++top]=1;beg[1]=0; for(int i=1;i<=m;i++){ if(a[i]==1)continu 阅读全文
posted @ 2020-10-27 22:50 syzf2222 阅读(82) 评论(0) 推荐(0) 编辑
摘要:因为两桥不能相交,故易得dp方程:dp[i]=\min\{dp[j]+sumw[i-1]-sumw[j]+(h[i]-h[j])^2\} 看起来似乎可以斜率优化,可惜h[i]不单调。 这里介绍一种很巧妙的做法:李超线段树。 整理方程:\(dp[i]-h^2[i]-sumw[i-1]= 阅读全文
posted @ 2020-10-26 20:15 syzf2222 阅读(84) 评论(0) 推荐(0) 编辑
摘要:纯暴力\Theta(n3)\(,前缀和优化\)\Theta(n2),因n为十万级别无法通过本题。 考虑将每个二进制位的贡献分开来算。 对于二进制第i位,若当前此位为1,则只有与0亦或才能产生贡献,反之亦然。 则对于每一个二进制位,维护数组val[i][0/1],代表这个位置上$0/1 阅读全文
posted @ 2020-10-23 23:19 syzf2222 阅读(190) 评论(0) 推荐(0) 编辑
摘要:考虑dp,设状态量dp[i][j]表示抽到i用了j次连抽的最大值。 预处理前缀和:sum[i]=\sum\limits_{j=1}^i a[j] 状转方程:\(dp[i][j]=\max\{\quad dp[i-k-c][j-1]+a[i-k-c+1]+sum[i]-sum[ 阅读全文
posted @ 2020-10-19 19:55 syzf2222 阅读(85) 评论(0) 推荐(0) 编辑
摘要:前言:OI中有一些奇思妙想,可能第一次自己想不出来,不要懊恼,不要沮丧,认真地去学习它,下次遇到就不怕了^_^ 正文:考虑dp,设状态量dp[i][j]表示前i个数分j段(任意一段满足条件)的方法数。 先给出状态转移方程: \(dp[i][j]=(j-c)*dp[i-1][j-1 阅读全文
posted @ 2020-10-18 21:01 syzf2222 阅读(141) 评论(0) 推荐(0) 编辑
摘要:孤立地去看每一个询问,发现问题可以这样转化: 有一些集合,取出一个数则集合占用,求最多可以取多少个从0开始的连续自然数。 先手玩一组数据: \{0,1,2\},\{1,2,3\},\{1,3\} 考虑0:占用{0,1,2} 考虑1:占用{1,2,3} 考虑2:发现有2的${1,2,3 阅读全文
posted @ 2020-10-17 21:51 syzf2222 阅读(98) 评论(0) 推荐(0) 编辑
摘要:部分分1:暴力算法O(n2m2),期望得分20pts。 部分分2:考虑枚举每个矩形的右上角。 转而考虑每一个点作为右上角能产生多少面积的矩形。 预处理数组rht[i][j]\(,代表从点\)(i,j)最远可以向右走多少。 那么每次枚举一个点,枚举向下延伸多长,可以得到以这条边最远能向右平 阅读全文
posted @ 2020-10-16 15:08 syzf2222 阅读(230) 评论(0) 推荐(0) 编辑
摘要:主要考察知识:点分治+最短路径生成树。 PART #1:最短路径生成树 相当于在跑dijkstra的时候记个路径所构成的树。 证明:1.除1外每个点均连一条边,故为n-1条边。 2.每个点均向最短路严格小于自己的点连边,故无环。 则一定为树,证毕。 注意:由于此题求最长路径,故选取最长的边, 阅读全文
posted @ 2020-10-03 23:53 syzf2222 阅读(163) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示