摘要:
题面 观察原递推式, \(f_i=1\times f_{i-1}+0\times f_{i-2}+1\times f_{i-3}\) , 所以 \[ \begin{aligned} f_i &= 1\times f_{i-1}+0\times f_{i-2}+1\times f_{i-3}, \\ 阅读全文
摘要:
题面 先讲坑点: 多测。 HDU不能cerr。 这个题明显的可以定义 \(f_i\) 为我打印到 \(i\) 点时的最小花费,那么显然我们有 \(f_i=\operatorname{min}\{f_j+(\sum_{k=j}^i a_k) ^2\}, 1\leq j< i\)。但是这样做的时间复杂度 阅读全文
摘要:
题面 对于每一秒,Bessie 肯定会跑一个单位。这是什么?过河卒! 然后枚举每一秒, \(f_{nowx,nowy,t}=\sum_{i=0}^3 f_{nowx-x_i,nowy-y_i,t-1}\) 。 这像一个DP。 没了。 代码 阅读全文
摘要:
CF题面 AT题面 先讲ABC的题。 首先不考虑数据范围的话,可以轻松写出一个 \(O(n^2)\) 的树形DP。 但是这个题过不去。所以考虑换一个算法。我去统计每一个数出现了几次。 那么显然这个边前后大于此边边权的边向外连出去的点和这条边木得关系了,那对当前边出现次数有影响的点,只可能是被边权小于 阅读全文
摘要:
题面 和这个题很像,但是本题有一个花费而那一题没有,所以我们要把 \(f\) 数组开大一维。 \(f_{i,j}\) 表示节点 \(i\) 为根的子树在 \(i\) 点是 \(j\) 状态下的最小花费。 状态可以参照我的题解。 那一个题解写得很含糊,这里再讲一遍。 分三种状态: 让父亲覆盖自己; 自 阅读全文
摘要:
题面 看题目就知道这是一个点覆盖型树形DP。 首先定义状态。设 \(f_i\) 为 \(i\) 节点的状态。 那么, \(f_i\) 有三种情况: 自己不放置坑爹。 儿子坑了自己。 儿子全部自给自足,自己不放置,靠儿子养活。 三个状态分别如图所示: 知道状态以后,转移就很简单了。 初始状态:坑爹,因 阅读全文
摘要:
题面 一道看上去像道换根DP但可以用其他方法水过去的题目,正解显然是换根DP。 考虑换根DP两个步骤,一个是求 \(f_1\) ,第二是由 \(f_u\) 推出 \(f_v\) 。 先是状态的定义。 \(f_i\) 表示以 \(i\) 为根的答案。 然后考虑"反向边"怎么存,因为不能不存。这个可以用 阅读全文
摘要:
题面 这个题就是个暴力题。 暴力从后往前枚举每一个状态,对于每一个状态暴力枚举每一种操作,然后暴力转移。 就是操作的时候位运算要看好是 << (l-1) 还是 << l 。另外就没什么难点了。 代码 阅读全文
摘要:
题面 看到数据范围显然是个状压DP。 考虑记录两个数组, \(dis\) 和 \(f\) 。\(dis\) 数组表示当前状态走了多少路程, \(f\) 数组表示当前状态有多少种走法。 显然 \(dis\) 数组可以随便推,在当前状态中随便取一位 \(p\) ,然后计算 \(dis_s=dis_{s- 阅读全文
摘要:
题面 可恨的getchar。 一般的状压dp。 因为空间不够开 \(100\times 2^{10} \times 2^{10}\) ,所以我们使用滚动数组。 如何滚动呢?我们在记录行数的那一维全部 \(\operatorname{mod}3\) 即可。因为当前行的状态只取决于前两行的状态。 然后就 阅读全文