DFS 求调



思路:

枚举n的二进制每个1选或不选

没有输出

貌似是dfs错了

code:

#include<bits/stdc++.h>
using namespace std;
long long n;
long long ans[65536];
long long cnt;
string bin(long long k){//十进制->二进制
	string p;
	if(k==0){
		return "0";
	}
	while(k){
		if(k%2){
			p="1"+p;
		}else{
			p="0"+p;
		}
		k/=2;
	}
	return p;
}
long long dec(string k){//二进制->十进制
	long long p=0;
	int pw=0;
	for(int i=k.size()-1;i>=0;i--){
		if(k[i]==49){
			p+=pow(2,pw);
		}
		pw++;
	}
	return p;
}
string p;//n的二进制
void dfs(int x,string q){//枚举
	if(x==p.size()-1){
		ans[++cnt]=dec(q);
		return;
	}
	for(int i=x;i<p.size();i++){
		if(p[i]==1){
			dfs(i,q+"1");
			dfs(i,q+"0");
		}
		q=q+"0";
	}
}
void solve(){
	dfs(0,"");
	sort(ans,ans+cnt+1);
	for(int i=1;i<=cnt;i++){
		cout<<ans[i]<<endl;
	}
}
int main(){
	cin>>n;
	p=bin(n);
	solve();
	return 0;
}
1 个赞

换成dfs(i+1,q+"1");dfs(i+1,q+"0");

1 个赞

WA 6pts :grimacing:

1 个赞

image
排序和输出是不是有点问题?

1 个赞