竞赛讨论区 > 大佬们帮我看看我题4的回溯哪有问题
头像
return_cjc
发布于 04-05 21:56
+ 关注

大佬们帮我看看我题4的回溯哪有问题

#include<bits/stdc++.h>
using namespace std;

vector<int> Nodes;
long long res = 0;
// string s = "000";

void backtracking(vector<pair<int,int>> &line,int &m,int idx){
    // cout<<s<<endl;
    if(Nodes[0] == 0) {
        // cout<<"HIT: "<<s<<endl;
        res++;
        return;
    }
    
    vector<int> CurNodes = Nodes;
    for(int i =idx;i<m;i++){
        //line有选与不选两种选择
        int bg = line[i].first,ed = line[i].second;
        for(int j = bg; j<=ed; j++){
            if(Nodes[j] == 0) continue;
            Nodes[j]--;
            Nodes[0]--;
        }
        // s[i] = '1';
        // cout<<"Ndoes: "<< Nodes[0]<<endl;
        backtracking(line,m,i+1);
        // s[i] = '0';
        Nodes = CurNodes;//回溯
    }
}
int main(){
    int n,m;
    while (cin>>n>>m)
    {
        Nodes.resize(n+1,2);
        Nodes[0] = 2*n;//Nodes[0]保存需要遍历的节点数量
        res = 0;
        
        vector<pair<int,int>> line(m);
        for (size_t i = 0; i < m; i++)
        {
            int st,ed;
            cin>>st>>ed;
            line[i]={st,ed};
        }
        backtracking(line,m,0);
        cout<<res<<endl;
        
        
    }
    
    return 0;
}

全部评论

(1) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐