360笔试魔塔
求大佬指点,我的代码错在哪了?(暴力dfs+回溯)
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; }