2 条题解
-
1
简单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
#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
- 上传者