30分求调
查看原帖
30分求调
1284847
wran楼主2025/2/8 14:20

用DFS枚举六种情况,但就是有问题,样例也没过。

#include<bits/stdc++.h>
using namespace std;
int a,b,c;
bool vis[30][30][30],milk[30];
void dfs(int a1,int b1,int c1){
	if(vis[a1][b1][c1]==1){
		return;//出口 
	}else{
		vis[a1][b1][c1]=1;
	}
	if(a1==0&&milk[c1]==0){
		milk[c1]=1;//标记 
	}
	if(a>a1&&c1>0){
		dfs(min(a,a1+c1),b1,max(0,c-a+a1));//c到给a 
	}
	if(c>c1&&a1>0){
		dfs(max(0,a-c+c1),b1,min(c,a1+c1));//a到给c 
	}
	if(b>b1&&c1>0){
		dfs(a1,min(b,b1+c1),max(0,c-b+b1));//c到给b 
	}
	if(c>c1&&b1>0){
		dfs(a1,max(0,b-c+c1),min(c,b1+c1));//b到给c 
	}
	if(a>a1&&b1>0){
		dfs(min(a,a1+b1),max(0,b-a+a1),c1);//b到给a 
	}
	if(b>b1&&a1>0){
		dfs(max(0,a-b+b1),min(b,b1+a1),c1);//a到给b 
	}
}
int main(){
	cin>>a>>b>>c;
	dfs(0,0,c);
	for(int i=0;i<=c;i++){
		if(milk[i]==1){
			cout<<i<<' ';
		}
	}
	return 0;
}
2025/2/8 14:20
加载中...