题目来源
题目描述
题目解析
这题出的巨恶心了,理解题目才是最困难的
决定一个牌翻还是不翻,取决于总得分和前三次的总得分的比较
因此我们需要算出到了当前位置时,其总得分是多少?怎么算呢?
总得分 = 当前牌分数 + 上一次的分数
int process(std::vector<int> vec){
int N = vec.size();
std::vector<int> scores(N, 0);
scores[0] = std::max(0, vec[0]);
int ans = scores[0];
for (int i = 1; i < vec.size(); ++i) {
int currScore = vec[i] + scores[i - 1];
if(i == 1 || i== 2){
scores[i] = std::max(0, currScore);
}else{
if(currScore > scores[i - 3]){
scores[i] = currScore; //翻牌
}else{
scores[i] = scores[i - 3]; // 不翻牌
}
}
ans = std::max(ans, scores[i]);
}
return ans;
}
int main(int argc, char **argv)
{
std::vector<int> ans {1, -5, -6, 4, 7, 2, -2};
std::cout <<process(ans);
}