int max_score = 0;
class Solution {
public:
int maximumScore(int a, int b, int c) {
// 初始化最大分数值
max_score= 0;
int score = 0;
// 递归方法
backtrucking(a,b,c,score);
return max_score;
}
void backtrucking(int a,int b,int c,int score){
// 退出递归的条件,任意两个为零退出
if(a==0&&b==0||a==0&&c==0||b==0&&c==0){
if(score>max_score){
max_score= score;
}
return;
}
// 为零的堆不再取
if(a==0){
backtrucking(a,b-1,c-1,score+1);
}
if(b==0){
backtrucking(a-1,b,c-1,score+1);
}
if(c==0){
backtrucking(a,b-1,c-1,score+1);
}
// 都不为零时,取其中最大的两个
if(a!=0&&b!=0&&c!=0){
if(a>=c&&b>=c){
backtrucking(a-1,b-1,c,score+1);
}else if(a>=b&&c>=b){
backtrucking(a-1,b,c-1,score+1);
}else if(b>=a&&c>=a){
backtrucking(a,b-1,c-1,score+1);
}
}
return ;
}
};