HDU - 1495
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int s,n,m,ans;
bool vis[101][101][101];//所有状态得标记。
bool flag;
void dfs(int x,int y,int z,int step)
{
if((x==s/2&&y==s/2)||(x==s/2&&z==s/2)||(y==s/2&&z==s/2))
{
ans=min(ans,step);
flag=1;
return;
}
if(x>0&&y<n)
{
int t=min(x,n-y);
if(!vis[x-t][y+t][z])
{
vis[x-t][y+t][z]=1;
dfs(x-t,y+t,z,step+1);
vis[x-t][y+t][z]=0;
}
}
if(x>0&&z<s)
{
int t=min(x,s-z);
if(!vis[x-t][y][z+t])
{
vis[x-t][y][z+t]=1;
dfs(x-t,y,z+t,step+1);
vis[x-t][y][z+t]=0;
}
}
if(y>0&&x<m)
{
int t=min(y,m-x);
if(!vis[x+t][y-t][z])
{
vis[x+t][y-t][z]=1;
dfs(x+t,y-t,z,step+1);
vis[x+t][y-t][z]=0;
}
}
if(y>0&&z<s)
{
int t=min(y,s-z);
if(!vis[x][y-t][z+t])
{
vis[x][y-t][z+t]=1;
dfs(x,y-t,z+t,step+1);
vis[x][y-t][z+t]=0;
}
}
if(z>0&&y<n)
{
int t=min(z,n-y);
if(!vis[x][y+t][z-t])
{
vis[x][y+t][z-t]=1;
dfs(x,y+t,z-t,step+1);
vis[x][y+t][z-t]=0;
}
}
if(z>0&&x<m)
{
int t=min(z,m-x);
if(!vis[x+t][y][z-t])
{
vis[x+t][y][z-t]=1;
dfs(x+t,y,z-t,step+1);
vis[x+t][y][z-t]=0;
}
}
}
int main()
{
while(cin>>s>>m>>n)
{
if(s == 0 && n == 0 && m == 0) break;
if(s % 2)
{
cout<<"NO"<<endl;
continue;
}
ans=inf;
flag=0;
vis[0][0][s] =1;
dfs(0,0,s,0);
if(flag)
cout<<ans<<endl;
else cout<<"NO"<<endl;
}
return 0;
}