1.题目

2.代码
#include<bits/stdc++.h>
using namespace std;
int A,B,C;
struct node
{
int staA,staB,staC;
};
vector<node> P;
set<int> res;
bool isInclude(node v)
{
for(int i=0;i<P.size();i++)
{
node N=P[i];
if(N.staA==v.staA&&N.staB==v.staB)
{
return true;
}
}
P.push_back(v);
return false;
}
void DFS(node n)
{
if(isInclude(n)) return;
if(n.staA==0) res.insert(n.staC);
int mV;
if(n.staA)
{
if(B!=n.staB)
{
mV=min(n.staA,(B-n.staB));
node cn=n;
cn.staA-=mV;
cn.staB+=mV;
DFS(cn);
}
if(C!=n.staC)
{
mV=min(n.staA,(C-n.staC));
node cn=n;
cn.staA-=mV;
cn.staC+=mV;
DFS(cn);
}
}
if(n.staB)
{
if(A!=n.staA)
{
mV=min(n.staB,(A-n.staA));
node cn=n;
cn.staB-=mV;
cn.staA+=mV;
DFS(cn);
}
if(C!=n.staC)
{
mV=min(n.staB,(C-n.staC));
node cn=n;
cn.staB-=mV;
cn.staC+=mV;
DFS(cn);
}
}
if(n.staC)
{
if(A!=n.staA)
{
mV=min(n.staC,(A-n.staA));
node cn=n;
cn.staC-=mV;
cn.staA+=mV;
DFS(cn);
}
if(B!=n.staB)
{
mV=min(n.staC,(B-n.staB));
node cn=n;
cn.staC-=mV;
cn.staB+=mV;
DFS(cn);
}
}
}
int main()
{
scanf("%d%d%d",&A,&B,&C);
node n;
n.staA=0;n.staB=0;n.staC=C;
DFS(n);
for(auto it=res.begin();it!=res.end();it++)
printf("%d ",(*it));
printf("\n");
return 0;
}