B.题,题意:2000个点的很多边的图,求所有最短路ij的长度平方的和.
题解:平方的和,我们没什么小技巧了. 只能求出来每个ij的长度. 那么我们枚举i为起点,来更新所有的j,但是是边的复杂度,太大了,我们发现其实只要更新f[j],一次,bfs的时候先更新到的就能删了,下次不用考虑.但是这道题重点是:用bitset来做,因为还有一个点连得边和当前没有更新的集合,取个&,然后关键是很快找到那些为一的序号,自己手写bitset以及对只有一个1的值放在数组里然后二分就好
D.题,题意:一个图,保证每个点都能够被从每个点开始所到达,现在给一个k>=3的限制,要求搞一个n的环,使得每个点都不同并且点与点之间<=k的距离.
题解:k=3发现就能够全部搞定.建一棵树,然后奇偶染色,我们跳着走,先走偶数,然后偶数dfs完了之后回来走奇数的点,奇数点回到头直接继续偶数的(这就是k=3而不是k=2的原因)
F.题,题意:给出一个d(<=16)维的向量,定义小于等于的意义是:每一维的数均小于等于每一维的数,然后给一个1e5的序列,让求出整个序列能够的挑出来的不降的数量.
题解:如果是普通的小于,那就是一个简单的数据结构,但是这个是很奇怪的要求,因此没有现成的数据结构. 我们考虑暴力,每次都弄出来一个高维前缀和,高维前缀和是(16*2^16)的复杂度,太大了.但是我们能够用一个分块的方法,建一个小的修改池,达到我们的数量要求L的时候再重新拿起来暴力重构一个高维前缀和,再这L积累的之间我们每次顺序扫(1到L次)来求结果,最后列出来公式求L = sqrt(16*2^16)
G.题,题意:n(500)个数需要编码建成哈夫曼树,哈夫曼树的每层i都有ri个不同字符个数的限制制 ,每个单词都有自己的权值,问最小权值分配.
题解:dp设fijk,代表i层,我们还有j个空位子,已经到了k号单词(排好序了),转移的话,每次j-1个空位子,就是放一个,要么就是都不放了,直接计算到下一层.关键是,哈夫曼树的过程只用考虑这一层有几个空位,因为以上的空位都填单词或者建新树了
H.题,题意:n~2000个数,每个位置的数>=0 且 <=ai, ai~1e9,要求所有的序列xi <= xj, 问一共有多少种方法.
题解:我们很可能设f[i][j],代表到i个数,第j层i,转移的话不好弄,可以用金爷的反着定然后fft的小技巧. 还有一种常用的方法,我们不设j, 混着算,就是全部从0,0 到 右上,然后减去不合法的, 不合法的枚举第一次不合法出现在哪里,然后暴力枚举0到i-1再乘组合数算
camp day1
最新推荐文章于 2022-03-01 21:01:57 发布