dfs求调
查看原帖
dfs求调
1272259
cgxd楼主2024/7/10 18:59
#include<bits/stdc++.h>
using namespace std;
vector<int> v, a;
bitset<55> vis;
int len;
int num(int l, int r){
	int ans = 0;
	for(int i = l; i <= r; ++i)
		(ans *= 10) += v[i];
	return ans;
}void operator>>(istream &is, vector<int> &v){
	int k;
	while(scanf("%1d", &k) != -1)
		v.push_back(k);
}void operator<<(ostream &os, vector<int> &v){
	for(int i: v)
		printf("%d ", i);
}void dfs(int x, int cnt, int maxn){
	if(x == len - 1){
		if(cnt == maxn){
			cout << a;
			exit(0);
		}return;
	}for(int i = 1; i <= 2; ++i){
		int nxt = x + i;
		if(nxt < len){
			int n = num(x + 1, nxt);
            if(!vis[n] and n < 50){
				a.push_back(n);
				vis.set(n);
				dfs(nxt, cnt + 1, max(maxn, n));
				a.pop_back();
				vis.reset(n);
			}
		}
	}
}signed main(){
	cin >> v;
	len = v.size();
    dfs(-1, 0, 0);
	return 0;
}
2024/7/10 18:59
加载中...