感觉和上次罐子那道题差不多啊 就是变成三维的罢了 O(n^3)
```
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
const int mod =100003;
#define endl '\n'
#define Endl '\n'
#define inf 1e18
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int g[N][N][N],n,m,s;
signed main(){
fast
while(1){
cin>>s>>n>>m;
if(!n&&!m&&!s)break;
if(s%2){
cout<<"NO"<<endl;
continue;
}
queue<tuple<int,int,int>>q;
q.push({0,0,s});
memset(g,0x3f,sizeof g);
g[0][0][s]=0;
while(q.size()){
auto [x,y,z]=q.front();
q.pop();
if(x){
int sum=x+y;
if(sum>m&&g[sum-m][m][z]==0x3f3f3f3f)g[sum-m][m][z]=g[x][y][z]+1,q.push({sum-m,m,z});
else if(g[0][sum][z]==0x3f3f3f3f)g[0][sum][z]=g[x][y][z]+1,q.push({0,sum,z});
sum=x+z;
if(sum>s&&g[sum-s][y][s]==0x3f3f3f3f)g[sum-s][y][s]=g[x][y][z]+1,q.push({sum-s,y,s});
else if(g[0][y][sum]==0x3f3f3f3f)g[0][y][sum]=g[x][y][z]+1,q.push({0,y,sum});
}
if(y){
int sum=x+y;
if(sum>n&&g[n][sum-n][z]==0x3f3f3f3f)g[n][sum-n][z]=g[x][y][z]+1,q.push({n,sum-n,z});
else if(g[sum][0][z]==0x3f3f3f3f)g[sum][0][z]=g[x][y][z]+1,q.push({sum,0,z});
sum=y+z;
if(sum>s&&g[x][sum-s][s]==0x3f3f3f3f)g[x][sum-s][s]=g[x][y][z]+1,q.push({x,sum-s,s});
else if(g[x][0][sum]==0x3f3f3f3f)g[x][0][sum]=g[x][y][z]+1,q.push({x,0,sum});
}
if(z){
int sum=x+z;
if(sum>n&&g[n][y][sum-n]==0x3f3f3f3f)g[n][y][sum-n]=g[x][y][z]+1,q.push({n,y,sum-n});
else if(g[sum][y][0]==0x3f3f3f3f)g[sum][y][0]=g[x][y][z]+1,q.push({sum,y,0});
sum=y+z;
if(sum>m&&g[x][m][sum-m]==0x3f3f3f3f)g[x][m][sum-m]=g[x][y][z]+1,q.push({x,m,sum-m});
else if(g[x][sum][0]==0x3f3f3f3f)g[x][sum][0]=g[x][y][z]+1,q.push({x,sum,0});
}
}
int ans=2e9;
int r=s/2;
for(int i=0;i<=s;i++){
ans=min(ans,g[r][r][i]);
ans=min(ans,g[i][r][r]);
ans=min(ans,g[r][i][r]);
}
cout<<ans<<endl;
}
return 0^0;
}
```