题目链接
题目类型:LIS变形
题目来源:BestCoder Round #20
题目分析
题目大意
$n$个人站成一排,每个人有两个容器$a, b$,巫师可以交换某一个人手里两个容器的容积,每交换一次消耗一点魔力值,巫师的魔力值有限,问在他能力范围之内,使$n$个人手中的$a$容器所形成的最长上升子序列长度最大,问最大长度是多少
解析
对于$n$个点,每个点具有两个状态,分别表示含有当前$a$容器以及含有当前$b$容器所形成的最长上升子序列信息,信息存储到该点所消耗的魔力值以及长度,对于不同容器,消耗的魔力值不一样,对于$b$容器,花费的魔力值要增加$1$点,如果对于$a$容器,花费的魔力值等于上一个状态的魔力值,这样我们可以求出来以任意一个容器结尾(必然包含该容器)的最长上升子序列的长度以及花费。我们找到最长的且花费在巫师能力值范围之内的即可。
代码
1 |
|