丢人
纯搜索
做了这么长时间
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<queue>
#include<vector>
#include<climits>
#include<string>
#include<cstdlib>
#include<map>
#include<ctime>
#define MAX 1000000007
#define LL long long
using namespace std;
int len,ans[25],a,b,c,i,exist[25],vis[25][25][25];
void dfs(int an,int bn,int cn)
{
if(vis[an][bn][cn]) return;
vis[an][bn][cn]=1;
if(an==0)
{
if(!exist[cn])
{
len++;
ans[len]=cn;
exist[cn]=1;
}
}
if(cn>=a-an) dfs(a,bn,cn-(a-an));
else dfs(an+cn,bn,0);
if(cn>=b-bn) dfs(an,b,cn-(b-bn));
else dfs(an,bn+cn,0);
if(an>=b-bn) dfs(an-(b-bn),b,cn);
else dfs(0,bn+an,cn);
if(an>=c-cn) dfs(an-(c-cn),bn,c);
else dfs(0,bn,cn+an);
if(bn>=a-an) dfs(a,bn-(a-an),cn);
else dfs(an+bn,0,cn);
if(bn>=c-cn) dfs(an,bn-(c-cn),c);
else dfs(an,0,cn+bn);
}
int main()
{
scanf("%d%d%d",&a,&b,&c);
dfs(0,0,c);
sort(ans+1,ans+len+1);
for(i=1;i<=len;i++)
printf("%d ",ans[i]);
return 0;
}