这道题的关键是把“从两端拿走 k 张”换个角度思考。
一共有 n 张牌,最终拿走 k 张,就等价于留下连续的 n−k 张不拿。 因为每次只能从最左端或最右端拿牌,所以最后剩下的牌一定是中间一段连续子数组。
于是:
几张卡牌排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。
每次操作,你可以从这一行卡牌的最左端或者最右端拿走一张卡牌,最终你必须恰好拿走 k 张卡牌。
你的得分为拿到的这 k 张卡牌点数之和。
现在给定卡牌点数数组 cardPoints 以及整数 k,请你求出可以获得的最大点数。
第一行输入两个整数 n 和 k,分别表示卡牌的数量以及必须拿走的卡牌数量。
第二行输入 n 个整数,第 i 个整数表示 cardPoints_i,即第 i 张卡牌的点数。
输出一个整数,表示可以获得的最大点数。
输入:
7 3
1 2 3 4 5 6 1
输出:
12
说明:
一种最优方案是从右侧依次拿走 1、6、5,总得分为 12。
输入:
3 2
2 2 2
输出:
4
输入:
7 7
9 7 7 9 7 7 9
输出:
55
输入:
3 1
1 1000 1
输出:
1
输入:
8 3
1 79 80 1 1 1 200 1
输出:
202