dfs20分
  • 板块P2415 集合求和
  • 楼主canwen
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/23 20:07
  • 上次更新2024/4/23 21:48:29
查看原帖
dfs20分
1284815
canwen楼主2024/4/23 20:07
#include<bits/stdc++.h>
using namespace std;
long long ans;
int ttm=0;int tmt;
int visit[35];
int aa[35];
int t[35];
void k(){
	for(int i=0;i<=34;i++) visit[i]=aa[i]=0;
}
int mm(int a,int j){
	for(int i=1;i<=tmt;i++){
		if(a==t[i]&&j!=i)return 1;
	}
	return 0;
}
void dfs(int dep,int sum){
    if(dep==sum+1){
    	for(int i=1;i<=dep-1;i++){
    		cout<<" "<<aa[i];
		}
		cout<<endl;
    	for(int i=1;i<=dep-1;i++){
    		ans+=aa[i];
		}
		return;
	}	
	for(int i=1;i<=tmt;i++){
		if(!visit[i]&&!mm(aa[i],i)){
			visit[i]=1;
			aa[dep]=t[i];
			dfs(dep+1,sum);
			visit[i]=0;
		}
	}

}
int main(){
	int a;
	while(scanf("%d",&a)==1){
		t[++ttm]=a;ans+=a;
	}
	tmt=ttm;
	for(int i=2;i<=ttm;i++){
		k();
		dfs(1,i);
	}
	cout<<ans;
	
	return 0;
}

感觉dfs写错了

2024/4/23 20:07
加载中...