9 条题解

  • 0
    @ 2025-4-2 18:07:42

    另类思路,看大家写的挺多的

    #include<iostream>
    #include<set>
    #include<vector>
    using namespace std;
    set<int> s;
    vector<int> vec(11);//存排序好的输入的所有的数
    vector<int> vec1(11);//存选择的数
    
    int ss;
    int n, r;
    int b[11];//标记选择过的对应vec的位置的数
    void dfs(int k) {
        if(k == r + 1) {
            for(int i = 0; i < k - 2; i++) {
                cout << vec1[i] << " ";
            }
            cout << vec1[k - 2] << endl;
        }
        
        for(int i = k - 1; i < n; i++) {
            if(b[i] == 0 && (k == 1 || vec1[k - 2] < vec[i])) {
                b[i] = 1;
                vec1[k - 1] = vec[i];
                dfs(k + 1);
                b[i] = 0;
            }
        }
    }
    int main() {
        cin >> n >> r;
    //这里用到set,进行从小到大排序
        for(int i = 0; i < n; i++) {
            cin >> ss;
            s.insert(ss);
        }
    //用assign将set中的数存到vec中去,主要是vec好取下标。
        vec.assign(s.begin(), s.end());
        dfs(1);
    }
    

    信息

    ID
    83
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    607
    已通过
    214
    上传者