T1:
L最近喜欢上了一个卡片游戏,游戏规则是:
2 个人一共拿 2n 张卡片,编号 1..2n,每个人 n 张,然后进行 n 轮出牌,每轮 2 个
人都打一张牌,,点数大的玩家每次获1分。
L可以预测到对方要打牌的顺序。
同时,L有一次机会选择了某个时间点,从那个时候开始,每回合点数少者获胜。
请你帮助 L获得最大的分数
分析:
贪心思想:
关键是找分割点,可以用数组排序,每次拿正好拿大一点的数,用完删除
正着做一次,反着做一次,然后选一次每个点作为分割点的得分
T2:
在L的书架上,有 N本精彩绝伦的书籍,每本书价值不菲。
M 是一个书籍爱好者,他对 L 的书籍早就垂涎三尺。最后他忍受不了诱惑,觉得去偷 L 的
书,为了迅速完成这件事,同时他不希望 L 很快发现书籍少了,他决定偷书时,对于任意
连续的 k 本书,他最多选 B 本,最少选 A 本。现在他想知道怎么选出来的书本最后使得偷
的书籍的价值和,与剩下的书籍价值和,差值最大。
分析:
一道较为简单的状态压缩题,F[i][S]前i个人 最后K 个人的状态是S的最优值
枚举i-k的状态。
T3
L的书籍被 M偷了以后伤心欲绝,决定再购买一些回来,现在有 N 本书可以买,每
本书的价格是 a[i]元。
现在L总共有 M 元,以及 K 张优惠券。 对于每本书,如果使用一张优惠券,则可
以用b[i]的优惠价格购买。 注意每本书只能使用一张优惠券,只能购买一次。
L想知道自己最多可以购买几本书?
【 输入】
第一行三个整数 N, K, M
接下来 N 行,每行两个整数,表示 a[i]和 b [i]。
【 输出】
一个整数表示答案。
又是一道贪心题,但似乎数据水了,先使用K张优惠券,买价格最小的。
如果考虑如何扩展当前解
1、直接购买一个 a[i]
2、退掉一个用优惠券的,用优惠券去买别的 b[j]+(a[i]-b[i])
2 种情况看哪一个更优
用堆维护a[i], b[i], a[i]-b[i] 。以便于保存状态。
总结:
这套题很考验思维水平,代码很短。