上一页 1 2 3 4 5 6 7 8 9 10 ··· 70 下一页
摘要: HDU - 5787 直接数位dp就好了。 阅读全文
posted @ 2019-09-06 23:13 NotNight 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 维护由若干点(x, y)构成上凸包,并支持求给定一个斜率k的求通过某个点截距的最大值, 需保证 x 递增, 询问 k 递减是用query,否则用query2, 单次log(n), 判断需要用到叉积, 注意是否会爆掉LL。 namespace CH { struct Point { LL x, y; 阅读全文
posted @ 2019-09-06 16:56 NotNight 阅读(244) 评论(0) 推荐(0) 编辑
摘要: HDU - 5799 第一部分可以dfs序莫队, 或者可以dsu on tree。 第二部分需要树上莫队, 我写的是欧拉序的好像比树分块的常数要大。。 用快读卡过去了。 阅读全文
posted @ 2019-09-06 14:25 NotNight 阅读(122) 评论(0) 推荐(0) 编辑
摘要: HDU - 5800 第一感觉就是算每个 <= s的子集的贡献, 如果一个自己长度为k, 那么贡献为 C(k, 2) * C(n - k, 2), 然后就需要一个n3的dp去记录长度以及重量和。 感觉以前没有写过这个dp。。。 其实我们不需要记录长度, 我们只需要记录已经选了几个必选的, 和选了几个 阅读全文
posted @ 2019-09-05 19:04 NotNight 阅读(164) 评论(0) 推荐(0) 编辑
摘要: HDU - 5815 感觉要是值域范围是1000以内, 感觉还是能写出来的。。 考虑dp[ i ][ j ]表示从 1 到 i 路径上的值是 j , i 这棵子树的最大贡献值。 然后可以发现 j 这维可以离散化, 离散化之后最优值不会变, 然后dp一遍就好了。 阅读全文
posted @ 2019-09-04 13:46 NotNight 阅读(135) 评论(0) 推荐(0) 编辑
摘要: HDU - 5819 我们考虑每个向左的点, 从左往右进行转移。 f[ i ][ j ] 表示前 i 个点攻击完之后, 剩下 j 个点向右移动的概率。 考虑转移 f[ i ][ j ] = sum(f[ i - 1 ][ k ] * 2 ^ (k - j - 1)) k >= j f[ i ][ 1 阅读全文
posted @ 2019-09-02 23:35 NotNight 阅读(177) 评论(0) 推荐(0) 编辑
摘要: HDU - 5823 枚举子集, 把一种颜色的一起加进去dp, 感觉3^n的复杂度不知道为啥跑这么快。 可以用fwt优化到(2 ^ n) * n * n 阅读全文
posted @ 2019-08-31 13:32 NotNight 阅读(182) 评论(0) 推荐(0) 编辑
摘要: HDU - 5854 二分答案之后, 设答案值为v, x为小于等于v的边的数量, y为大于v的边的数量, 列出方程 x > (x + y) / k == (k - 1) * x - y > 0, 感觉有点像线性规划的样子。 然后用树形dp去check, 判合不合法的时候可以优化成一个R, 但是不优化 阅读全文
posted @ 2019-08-30 22:11 NotNight 阅读(219) 评论(0) 推荐(0) 编辑
摘要: HDU - 5852 就是个裸的LGV定理套一下, 求下行列式的值。 阅读全文
posted @ 2019-08-25 21:50 NotNight 阅读(158) 评论(0) 推荐(0) 编辑
摘要: HDU - 5845 dp[ i ] 表示分完前 i 段, 最多能分几段。 我们能得到一个n2的dp, 然后用字典树优化掉。 我用了一个multiset去维护删除, 但实际上因为dp值有单调性, 所有维护sz就够了。 换成c++卡内存卡过去的。 阅读全文
posted @ 2019-08-25 21:05 NotNight 阅读(173) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 70 下一页