午餐

受到国王游戏的启发,我们可以考虑当一个队伍的人定了之后,如何排序会最优

利用国王游戏的方法会发现是按照\(b\)数组递减排序

如果不交换,是\(max(a_i+b_i,a_i+a_{i+1}+b_{i+1})\),交换之后是\(max(a_{i+1}+b_{i+1},a_i+a_{i+1}+b_i)\)

我们有\(max(a_i+b_i,a_i+a_{i+1}+b_{i+1})≥max(a_{i+1}+b_{i+1},a_i+a_{i+1}+b_i)\)

由于\(a_i+b_i≤a_i+b_i+a_{i+1}\)\(a_{i+1}+b_{i+1}≤a_{i+1}+b_{i+1}+a_i\)

所以上面这个不等式等价于\(a_{i+1}+b_{i+1}+a_i≥a_i+a_{i+1}+b_i\),也就是\(b_{i+1}≥b_i\)

于是再利用DP考虑每一个人是在第一支队伍还是第二支队伍

这里重新做这道题目的时候,发现思路被陪审团给限制了,设置DP状态的时候一直在用维度表示一支队伍的状态,DP值表示另一只队伍的状态;这道题目给我们的启示就是,我们也可以同时用维度表示两只队伍的状态,DP值也同时表示两支队伍的状态

然而,像陪审团这道题目,可不可以用一维来表示两支队伍的时间差值呢?想一下不太清楚

update 2026.2.18
重新做一遍的时候做出来了
肯定是要排队的,按照国王游戏的思路去做就好了。排完队了肯定是DP;按照陪审团的思路做完了之后发现不行的话再按照其他思路设置DP方程,很经典的方程就是\(f_{i,j,k}\)表示前\(i\)个人,第一支队伍的结尾是\(j\),第二只队伍的结尾是\(k\);受到传纸条的启发,尽量删除DP的冗余信息,设\(f_{i,j}\)表示前\(i\)个人,第一支队伍的结尾是\(i\),第二只队伍的结尾是\(j\);但是此时推导的话就会发现新加入进来的这个人计算费用的话需要其所在队伍的排队时间,所以重新设置DP状态,将其按照题解这么设置
其实题目的数据范围说所有的数据都不超过\(200\)也是一种提示

posted @ 2024-01-26 23:20  最爱丁珰  阅读(20)  评论(0)    收藏  举报