2 条题解

  • 1
    @ 2023-1-6 14:41:02

    简单dfs

    #include<bits/stdc++.h>
    using namespace std;
    int a,b,c,ans[10001],ans1;
    bool t[61][61][61];
    void dfs(int x,int y,int z)
    {
    	if(t[x][y][z])return;
    	if(x==0)ans[++ans1]=z;
    	t[x][y][z]=1;
    	if(z<=a-x)dfs(x+z,y,0);
    	else dfs(a,y,z-a+x);
    	//z->x
    	if(z<=b-y)dfs(x,y+z,0);
    	else dfs(x,b,z-b+y);
    	//z->y
    	if(y<=a-x)dfs(x+y,0,z);
    	else dfs(a,y-a+x,z);
    	//y->x
    	if(y<=c-z)dfs(x,0,z+y);
    	else dfs(x,y-c+z,c);
    	//y->z
    	if(x<=b-y)dfs(0,y+x,z);
    	else dfs(x-b+y,b,z);
    	//x->y
    	if(x<=c-z)dfs(0,y,z+x);
    	else dfs(x-c+z,y,z);
    	//x->z
    }
    int main()
    {
    	cin>>a>>b>>c;
    	dfs(0,0,c);
    	sort(ans+1,ans+ans1+1);
    	for(int i=1;i<=ans1;i++)
    	cout<<ans[i]<<" ";
    }
    
    • 0
      @ 2025-7-15 8:21:54
      #include<bits/stdc++.h>
      using namespace std;
      typedef long long ll;
      ll A,B,C,f[50][50][50],h[50];
      void dfs(ll a,ll b,ll c)
      {
      	if(f[a][b][c]==0){
      		f[a][b][c]=1;
      		if(a==0) h[c]=1;
      		if(a<B-b) dfs(0,b+a,c); else dfs(a-(B-b),B,c);
      		if(a<C-c) dfs(0,b,c+a); else dfs(a-(C-c),b,C);
      		if(b<A-a) dfs(a+b,0,c); else dfs(A,b-(A-a),c);
      		if(b<C-c) dfs(a,0,c+b); else dfs(a,b-(C-c),C);
      		if(c<A-a) dfs(a+c,b,0); else dfs(A,b,c-(A-a));
      		if(c<B-b) dfs(a,b+c,0); else dfs(a,B,c-(B-b));
      	}
      }
      int main()
      {
      	cin>>A>>B>>C;
      	dfs(0,0,C);
      	for(int i=0;i<=30;i++)
      	if(h[i]==1) cout<<i<<' ';
      }
      
      • 1

      信息

      ID
      143
      时间
      1000ms
      内存
      256MiB
      难度
      4
      标签
      (无)
      递交数
      192
      已通过
      96
      上传者