洛谷1973嘉年华

发布时间 2023-10-17 21:12:16作者: 最爱丁珰

本来一看数据范围,n为200

就很容易去想以各个区间的序号为状态

但是这样要么顾得了头顾不了尾,要么顾得了尾顾不了头(即以区间左端点排序或者以区间右端点排序)

所以我们以区间的时间为状态,那么这里肯定要离散化,这样枚举的时间既有可能是左端点,也有可能是右端点,就可以推走了

然后可以看看这篇题解

解释一下这篇题解状态转移方程是怎么出来的

首先我们想一下最优的方案的第一份中区间右端点最大是多少

所以我们枚举一个k,其中k小于i,表示第一份的区间最大右端点,那么显然就是\(f[k][j]\),此时我们肯定可以把\(c(l,r)\)这里面的所有区间放入第二份,所以加上\(c(l,r)\)(这就是第二个状态转移方程)

那么为什么还需要第一个状态转移方程?

因为我们有可能漏掉一个最优解:当i这个时间点是某些区间的右端点时,我们上述转移方程没有考虑到把这些区间中的某一些放入第一份的情况

我们假设最优方案第一份中右端点为i的区间的左端点最小为p,那么当k枚举到p-1的时候,就把这个最优方案包含进去了。这就是第一个状态转移方程

当然最后答案我觉得可以不用取min就一定会枚举到最优方案