摘要:
题面 首先考虑什么是最优策略,其实这个最优策略就是从大到小一个个按。因为小的不会也不能影响大的,显然这样按是最优且必须的,于是我们枚举下因数拿vector存一下,然后直接模拟就可以搞到$50pts$了(好像因为毕姥爷的数据造水了(?)导致这么做有$80pts$(雾 ) 那么考虑在达到$k$前的这个随 阅读全文
posted @ 2018-10-24 11:07
Speranza_Leaf
阅读(133)
评论(0)
推荐(0)
摘要:
题面 首先有个结论:$C_n^m$为奇数当且仅当$m$是$n$的一个子集 于是从后往前推,记录每个数出现的位置,然后对每个位置枚举子集统计在它后面的贡献即可 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using na 阅读全文
posted @ 2018-10-24 10:36
Speranza_Leaf
阅读(134)
评论(0)
推荐(0)
摘要:
题面 经典的$cov-unc$树形dp(这词是你自己造的吧=。=) 设$cov[i][j]$表示覆盖完$i$的子树后至少向外再覆盖$j$层的最小代价,$unc[i][j]$表示$i$的子树中还剩下至少$j$层没有覆盖时的最小代价,然后是两个数组的抵消转移什么的 1.边界:对于每个需要覆盖的节点$i$ 阅读全文
posted @ 2018-10-24 10:34
Speranza_Leaf
阅读(121)
评论(0)
推荐(0)
摘要:
题面 首先,单独处理每个询问复杂度显然不可承受,还是考虑通过排序使得限制更容易达到:按照$a$将物品排序,按照$m$将询问排序,这样肯定是要不断添加物品才能达到要求,顺着做一遍就行了 然后发现$b$的限制仍然不好满足,但是我们的可行性dp的数组只记录了是否可行,还有利用的余地,那么以$dp[i]$记 阅读全文
posted @ 2018-10-24 09:08
Speranza_Leaf
阅读(104)
评论(0)
推荐(0)
摘要:
题面 做背包时可以通过排序来使得转移满足某种限制或是让我们判断一个状态是否有贡献 这个题将人数从大到小排序后做背包,这样每次那个最小的党加入而使得答案合法时之前的党也都是合法的 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 阅读全文
posted @ 2018-10-24 08:48
Speranza_Leaf
阅读(112)
评论(0)
推荐(0)
摘要:
题面 这种不断删边的首先肯定想到时光倒流啊=。= 在最后剩下的连通图上跑出一棵搜索树,先将边权都赋为$1$,那么两点间的关键航线就是链上边权和,而每加入一条非树边$u,v$都会使得$u,v$链上的边的边权变为零。写个树剖,先把非树边加进去,然后逆着做一下就行了。 1 #include<map> 2 阅读全文
posted @ 2018-10-24 08:40
Speranza_Leaf
阅读(127)
评论(0)
推荐(0)
摘要:
题面 我们很容易想到差分约束,但是我们建出来图之后好像并不好下手,因为我们只能得到砝码间的大小关系,并不能容易地得到每个砝码的具体重量。 于是我们有了一种神奇的思路:既然得不到具体重量我们就不求具体重量了,只求出砝码间的关系即可,因为砝码只有三种还是可以讨论的。具体来说我们用$maxx[i][j]$ 阅读全文
posted @ 2018-10-24 08:31
Speranza_Leaf
阅读(102)
评论(0)
推荐(0)
摘要:
题面 很有趣的一道题,看起来是个神奇网络流,其实我们只要知道网络的一些性质就可以做这道题了 因为题目要求流量守恒,所以我们其实是在网络中搬运流量,最终使得总费用减小,具体来说我们可以直接把这种“搬运”的关系建出来: 对于一条从$u$到$v$的边,从$u$向$v$连一条$b+d$的边,如果其上限不为零 阅读全文
posted @ 2018-10-24 08:26
Speranza_Leaf
阅读(129)
评论(0)
推荐(0)
摘要:
题面 我们发现我们可以很容易知道最终完成的生成树中有多少鹅卵石路,但是我们不好得到这棵生成树的结构,所以我们尽量“谨慎”地完成生成树·,最好是一点点加到我们要达到的标准而不是通过删掉一些东西来完成 我们把水泥路视为权值为零,鹅卵石路视为权值为一,做最小生成树,这时加入在生成树里的鹅卵石路一定是必须加 阅读全文
posted @ 2018-10-24 07:38
Speranza_Leaf
阅读(115)
评论(0)
推荐(0)

浙公网安备 33010602011771号