360笔试|360笔试魔塔问题
3037
2022.03.19
发布于 未知归属地

简介

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;
}
评论 (8)