#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) 回帖