题目
分析
先枚举第一轮排名为第k名的选手(分数为x),则必存在一种最优方案有:
1. 对于分数少于x的0国选手,都安排在第一轮;
2. 对于分数少于x的1国选手,都安排在第二轮。
做一下预处理
1. 第一轮分数低于x的1国选手对答案无贡献,所以我们先筛除这部分选手;
2. 剩下:1国选手 和 第一轮分数不低于x的0国选手;
3. 对于剩余部分的选手,按照第二轮分数从高到低排序
然后动态规划
设F[i][j] : 在前 i 个选手中,有 j 个选手分配到第一轮预赛并排名在前k位
对于0国选手(第一轮得分必不小于x):
a. 分配到第1轮(j < k):F[i+1][j+1] =max(F[i+1][j+1], F[i][j]);
b.分配到第2轮:F[i+1][j] = max(F[i+1][j], F[i][j]);
对于1国的选手:
a.第一轮分数小于x:若i-j < k, F[i+1][j] =max(F[i+1][j], F[i][j] + SecRound[i]);
b.第一轮分数大于等于x:
分配第一轮(j < k): F[i+1][j+1]=max(F[i+1][j+1], F[i][j] + FirRound[i]);
分配第二轮:
a) 当 i - j < k 时, F[i+1][j] = max(F[i+1][j], F[i][j] + SecRound[i]);
b)否则,F[i+1][j] = max(F[i+1][j], F[i][j]);