暴力模拟多种情况。我是用搜索写的,注意返回条件和约束条件。
#include#include #include #include #include using namespace std;int a,b,c;int ans[1000],l;bool f[50][50][50];void dfs(int x,int y,int z){ if(f[x][y][z]) return; if(x==0) ans[++l]=z; f[x][y][z]=1; dfs(x-min(x,b-y),y+min(x,b-y),z); dfs(x+min(y,a-x),y-min(y,a-x),z); dfs(x+min(z,a-x),y,z-min(z,a-x)); dfs(x-min(x,c-z),y,z+min(x,c-z)); dfs(x,y-min(y,c-z),z+min(y,c-z)); dfs(x,y+min(z,b-y),z-min(z,b-y)); return;}int main(){ scanf("%d%d%d",&a,&b,&c); dfs(0,0,c); sort(ans+1,ans+l+1); for(int i=1;i<=l;i++) printf("%d ",ans[i]); return 0;}