用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;
}