I Wanna be the Team Leader

看这篇题解,中间有个地方写错了

不应该是\(a_k\),应该是\(a_j\)(update 2024.9.6:好像没写错?)

来讲一下思路。这道题目贪心肯定不太好想,所以从DP的角度考虑,而DP需要连续的一段(也就是阶段性),所以我们考虑如何将\(a\)排序

我们选择将\(a\)从大到小排序(为什么下面会有解释),然后考虑可行性DP,借鉴“校长的烦恼”这一道题目的思路不难写出方程

然后我们就会发现复杂度爆炸,这个时候我们就要考虑将可行性DP转化成最优性DP来降低复杂度(充分利用数组值,以前在背包的地方碰到过类似技巧)

肯定是要保留集合这一维度的,所以我们去掉第一维度,然后我们将数组值弄成第一维度,肯定是设置为最小的\(i\),所以我们要求\(g_{i,j}\)

这个时候将\(a\)从大到小排序的好处就出来了,为什么我们一定要从\(f_S+1\)这一个位置开始选?因为如果从更远的位置开始选,\(a\)会变小,而且相同条件下数的个数也会变少(分母会减少),肯定更不优

这一道题目我是想到了可行性DP这里的,但是没有想到可行性DP转最优性DP,以后这个trick记住吧

update 2024.7.4

重新做一遍还是只想到可行性DP,因为觉得可行性DP复杂度太爆炸了,没有在草稿纸上写出,导致觉得根本无法做,其实将可行性DP在草稿纸上写出的话,应该可以想到可行性DP转最优性DP的,所以一定要在草稿纸上写下啊

update 2024.9.6

重新做一遍做出来了,只差最后的求\(g\)了(我想的是线段树维护加上线段树二分查询,应该也行,但是太复杂了);状态压缩DP一定别忘了预处理啊;这里可行性DP转最优性DP的思路主要借助了这道题目的思想,这道题目也是用到的可行性转最优性DP,而且也是用的双指针处理

posted @ 2024-03-24 18:16  最爱丁珰  阅读(0)  评论(0编辑  收藏  举报