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再乘组合数算web
本文分享 CSDN - ruclion。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。数组