【GDKOI2015】星球杯

题目

这里写图片描述

分析

先枚举第一轮排名为第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]);

阅读更多
版权声明:随便copy,我还求之不得呢 https://blog.csdn.net/A_loud_name/article/details/79646201
个人分类: c++ 动态规划
上一篇【GDKOI2015】看门狗
下一篇找回密码 jzoj 4025 后缀自动机
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭