题解/算法 {C. Goose Goose Duck}
@LINK: https://codeforces.com/gym/105184;
令A[N]表示这N个人的区间;
比如答案是[a,b,c,d] 那么他一定满足: A[a].lef <= 0 <= A[a].rig, A[b].lef <= 1 <= A[b].rig, A[c].lef <= 2 <= A[c].rig, …
贪心;
对于最开头的人来说, 令集合S: 满足A[].lef <= 0的区间, 那么我们要选择一个 满足A[].rig >= 0前提下的 最小的A[].rig, 比如说S: [0,0] , [0,1], [0,2] 那么我们选择[0,0], 因为他们都可以放到当前位置 而[0,1], [0,2]他们的rig更大 意味着 后面的位置也可以选择他们 即他们的选择性更大, 我们在当前位置 选择一个选择性最小(即最差)的方案;
更一般的说, 对于当前位置ind (即此时[0,1,2,...,ind-1]这些位置 已经排列好了), 我们要选择一个区间 满足A[].lef <= ind <= A[].rig, 令集合S: 满足A[].lef <= ind的区间, 这些区间里 我们再根据A[].rig从小到大排序 选择一个满足A[].rig >= ind且最小的

最低0.47元/天 解锁文章
432

被折叠的 条评论
为什么被折叠?



