听了一下心理课。
得出的结论是,不好好努力,以后就要过不自由的生活了。
真是吓人。不过,现实如此。
这周的任务:
安心消化DP进阶 and 数学,然后再回过头来慢慢练之前的(计算几何,网络流补充)。
T1 CF731F Video Cards
其实本意是看点杂项练练思维。不过这题好水,QWQ。
a - a % b = floor(a / b) * b 所以可以直接枚举倍数,维护桶。
几个细节:
①枚举的时候应该是不超过las就能继续统计,同时右边界要控制在max ai以内,否则前缀和相减会出负数。
②跟上一个数相等要continue 不然大量1就会导致复杂度爆炸。
T2 [USACO12DEC]Running Away From the Barn G
这题的话,仍然是用到“转换视角”的思路,从我看子树,到我看祖先。我能对多远的祖先产生贡献,一路上的祖先也一定能够产生贡献。所以,倍增跳到最远的祖先,而后树上差分即可。
T3 [NOI2011]嘉年华
意在解决区间DP,掌握其常见优化及“拼凑”的技巧。咱们再推一遍试试。
数据范围[1, 200],显然n三方,考虑区间DP。
首先考虑没有任何活动必定要被安排的情况。
时间的绝对值大小并没有意义,可以离散化降到O(2n)
我们需要的信息是:当前安排到哪里?最多能安排多少活动?同时考虑两个活动会场看起来比较困难,考虑固定一个会场的活动数目。
f[i][j]表示对其中一个会场安排[1,i]范围内共钦定j项活动,另一个活动会场的活动数目最大值。转移显而易见:f[i][j] = max{k ∈ [0, i-1]}f[k][j - s[k + 1 , i]], f[k][j]+ s[k + 1 , i]
(考虑这一步时,我的思维缺陷是:dp的实质是考虑所有状态+模拟决策 模拟决策时我没有想到应该是枚举分配到某会场,导致遗漏了另一个会场的情况)
接下来考虑某一项活动一定要安排的情况。考虑到可以等效于包含这个活动的区间一定要被选中,但由于活动的区间杂在一起无法分割,所以似乎需要n²去枚举这样的区间。
再设置g表示类似定义下的后缀和。
令j,k代表跟s[x + 1][y - 1]在同一个会场的活动数量
转移方程:针对每个i,有ans[i] = max{min(f[x][j] + g[y][k], s[x + 1][y - 1] + j + k)
总复杂度n的五次方?
No,考虑优化。
优化的本质一:重复利用已经计算过的信息。
考虑记忆化对应的ans[x][y],总复杂度降到n四方。
问题转化为如何快速计算对应{x,y,j,k}的结果。
优化的本质二:利用单调性优化。
重新分析仍然没有想到——对于f[l][x],如果x移动到更大的地方,应该由更小的y来取到最大值。
有点类似于冰火战士。注意交点左右两边都是可能的答案,都需要更新。
改了一下,如果j,k代表跟s[x + 1][y - 1]不在同一个会场的活动数目呢?
喜提Wrong Answer一枚。为什么呢?
调整了一下细节:
1.k的枚举,前缀和要从0开始以确保所有活动全部给一个会场可以被枚举到,g同理。(确保所有状态都被cover到)
2.不合法的状态制为-0xcf(建议一次运算不会爆炸的范围内,严格的负无穷其实是128,但一算就炸了)
3.dp数组其实并非严格单调,比如两个重复区间要么同时选要么同时不选,这时候就会出现0、2均合法,但1不合法的情况。解决:似乎是做后缀和?但没有完全理解。
T4 [AHOI2009]同类分布
做这题意在掌握数位DP的解决思路。
调了一晚上......
一开始是递推,后来改魔怔了就改成了记忆化搜索。
几个智障错误:
①lb手滑写成la
②带下去判断是否触界的应该是a[i],而非a[len]
③是≤这个数,所以允许前导零。
④1e18共有19位,数组要开到19。
以后还是老老实实先写记搜吧(有时间再改递推\
T5 花神的数论题
数位DP板子,细节同上题。
不用快速幂就能无事发生
不过欧拉定理相关以后有机会还是了解一下吧