#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <iostream>
using namespace std;
#define LL __int64
#define mod 9973
#define N 100010 int n,m,s; bool vis[102][110][110];
struct asd{
int cup1;
int cup2;
int cup3;
int step;
};
asd q[N];
int head,tail; void bfs()
{
memset(vis,0,sizeof(vis)); head=0;tail=1;
q[head].cup1=s;
q[head].cup2=0;
q[head].cup3=0;
q[head].step=0;
vis[s][0][0]=1; int x,y,z;
while(head<tail)
{
int a=q[head].cup1;
int b=q[head].cup2;
int c=q[head].cup3; if(a==b&&a==s/2)
{
printf("%d\n",q[head].step);
return;
}
//cup1->cup2|cup1->cup3|先cup1->cup2后cup1->cup3
if(a>0)
{
//cup1->cup2只能倒满,或者倒不满
//不会出现倒不满的现象,只会倒不倒;
x=a-(n-b);
y=n;
z=c;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
x=0;
y=n;
z=m;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
x=(a-(m-c));
y=b;
z=m;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
}
//cup2->cup1|cup2->cup3|\cup2->cup1;
if(b>0)
{
x=a+b;
y=0;
z=c;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
if(b+c>=m)
{
x=a;
y=b-(m-c);
z=m;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
x=s-m;
y=0;
z=m;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
}
else
{
x=a;
y=0;
z=b+c;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
}
}
//cup3->cup1|cup3->cup2\\cup3->cup1
if(c>0)
{
x=a+c;
y=b;
z=0;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
if(b+c>=n)
{
x=a;
y=n;
z=c-(n-b);
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
x=s-n;
y=n;
z=0;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
}
else
{
x=a;
y=b+c;
z=0;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
}
}
head++;
}
printf("NO\n");
} int main()
{
while(~scanf("%d%d%d",&s,&n,&m))
{
if(s==0&&n==0&&m==0)
break;
if(n<m)
{
int temp=n;
n=m;
m=temp;
}
if(n+m<s||n+m>s||s%2==1)
{
puts("NO");
continue;
}
bfs();
}
return 0;
}

最新文章

  1. SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值
  2. iOS 判断View 是否是第一次显示
  3. 【markdown】markdown常用语法
  4. JSP显示-下拉框
  5. 根据数据库内容动态生成html页面
  6. UI篇--android实现底部按钮布局
  7. CSS之显示天气
  8. Java Singleton 单例模式
  9. Win10使用小技巧
  10. 写给新手的WebAPI实践
  11. TEXT和BLOB区别
  12. Python内置函数(56)——locals
  13. Nginx 相关介绍
  14. 叙述 activemq 与spring 主题实现 小功能实现
  15. Go指南练习_映射
  16. hdu6365 2018 Multi-University Training Contest 6 1004 Shoot Game
  17. arduino新入手体验:三个小实验
  18. 负载均衡介绍及Nginx简单实现
  19. X、Y轴抖动的动画
  20. 小米盒子 作为nas服务器

热门文章

  1. Effective C++ 条款六 若不想使用编译器自动生成的函数,就该明确拒绝
  2. 子结点childNodes
  3. Network Booting
  4. iOS_40_核心动画
  5. C开发人员眼中的SICP学习
  6. Animated progress view with CAGradientLayer(带翻译)
  7. iOS--判断字符串NSString中数字、中文、大小写英文
  8. openwrt hotplug
  9. mysql的DUPLICATE KEY
  10. iOS 内购遇到的坑