2022.3.19日360笔试,求大佬帮看一下我的魔塔问题错在哪了?
int res = 0;
void dfs(vector<int> grade, vector<int> val, int num, int cur,vector<bool> note) {
//所有关卡打完,看得分是否比原来的大
if (num == grade.size()) {
res = max(res, cur);
return;
}
for (int i = 0; i < grade.size(); i++) {
//如果这关攻略过了,直接跳过
if (note[i])continue;
//记录这关得了多少分
int tmp = 0;
//这关没有宝物,直接得分
if (val[i] == 0) {
tmp = grade[i];
cur += tmp;
}
else {
if (cur + grade[i] > 2 * cur) {
tmp = grade[i];
cur += tmp;
}
//有宝物并且翻倍比得分大
else {
tmp = cur;
cur += tmp;
}
}
//表示这关已经攻略过了
note[i] = true;
dfs(grade, val, num + 1, cur, note);
cur -= tmp;
note[i] = false;
}
}
int main() {
int n = 0; //共有n个关卡
cin >> n;
//表示每关可以得多少分
vector<int> grade(n, 0);
//表示每关是否有宝物
vector<int> val(n, 0);
for (int i = 0; i < n; i++) {
cin >> grade[i] >> val[i];
}
//记录某关是否已经攻略过了
vector<bool> note(n, false);
dfs(grade, val, 0, 0, note);
cout << res;
return 0;
}