摘要: 题解: 比较好想 首先注意到如果最暴力的做法复杂度无法接受 而5000的范围基本是n^2做法了 只使用已经遍历过的点数目和当前子树中的点数目转移我们知道复杂度是n^2的 于是大胆猜测一波同一个节点为根值域是连续的 然后就可以暴力dp了 查询的时候我们可以把序列差分一下(原问题等价于 区间修改,区间询 阅读全文
posted @ 2018-09-16 23:07 尹吴潇 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 题解: 水题 不过上限是4e8的 注意到这个数最大是99999999 即4599 我们可以直接数位dp f[i][j][0/1]表示前i位,和为j,和前面是否相等表示状态 阅读全文
posted @ 2018-09-16 22:00 尹吴潇 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 题解: 考试的时候没有想出来。。。 刚开始想了个比较错误的dp 后来想到了容斥。。 但是没有想到怎么去维护这个东西。。 按照一般的套路 至少有一个相邻相等的-至少有两个相邻相等的 但是这道题里这样并不好维护 我们考虑用dp来算这个东西 f[i]=f[j]*min(a[j].....a[i])*(-1 阅读全文
posted @ 2018-09-16 21:18 尹吴潇 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 题解: 自己在这一类问题上想到的总是3^n的枚举法 首先背包从大到小排序 f[i]表示搞出为i的状态至少要用几个背包,g[i]表示最大剩余容量 这样就可以2^n*n 因为这么做利用了状态之间的先后顺序 代码: 阅读全文
posted @ 2018-09-16 20:12 尹吴潇 阅读(152) 评论(0) 推荐(0) 编辑