http://acm.hdu.edu.cn/showproblem.php?pid=1495

题解:

1.最少次数?
江湖套路,bfs。
2.怎么倒?
从一个杯子倒到另一个杯子。
3.倒多少?
因为没有刻度,所以是将自己的水倒完 或者 将别人的未填满部分 填充完。
4.为什么可以这样倒?
因为起始水量和杯子容量都知道,倒水后两边的水量都是已知的,倒水量也是已知的。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<queue>
#include<vector>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std; struct node
{
int x,y,z,t;
};
int x,y,z;///杯子容量
bool vis[][][];
int b[];
queue<node>que; int bfs()
{
while(!que.empty())
que.pop();
memset(vis,false,sizeof(vis));
que.push({x,,,});
vis[x][][]=true;
while(!que.empty())
{
node now=que.front();
que.pop();
if((now.x==now.y&&now.z==) || (now.x==now.z&&now.y==) || (now.x==&&now.y==now.z) )
{
return now.t;
}
int a[]={,,,,};
a[]=now.x;
a[]=now.y;
a[]=now.z;///三个杯子
a[]=now.t; int temp[]={,,,,};///临时存储的新的状态 for(int i=;i<=;i++)///倒水的杯子i
{
for(int j=;j<=;j++)///进水的杯子j
{
int temp[]={,,,,};
temp[]=now.x;temp[]=now.y;temp[]=now.z;///和a一样获取now的值,因为只对两个杯子变动,还有一个没变
int need=b[j]-a[j] ;///被倒进的杯子还需要多少装满
if( i!=j )///不是同一个杯子
{
if(a[i]<=need)///如果a能倒完
{
temp[i]=;
temp[j]=temp[j]+a[i];
}
if(a[i]>need)///a不能倒完,就倒need量的水
{
temp[i]=a[i]-need;
temp[j]=a[j]+need;
}
if( !vis[ temp[] ][ temp[] ][ temp[] ] )
{
que.push( { temp[],temp[],temp[],a[]+ } );
vis[ temp[] ][ temp[] ][ temp[] ]=true;
}
}
}
}
}
return ;
} int main()
{ while(scanf("%d%d%d",&x,&y,&z)&&(x+y+z))
{
b[]=x;
b[]=y;
b[]=z;///b数组是容量
int ans=bfs();
if(ans)
printf("%d\n",ans);
else
printf("NO\n");
}
return ;
}

最新文章

  1. 程序员必须要知道的Hadoop的一些事实
  2. mui,css3 querySelector,appendChild,style.display,insertBefore
  3. 一个修改过简化版的InputQuery
  4. Loadrunner:LR提交JSON格式的POST请求
  5. Oracle dmp文件导入(还原)到不同的表空间和不同的用户下
  6. Poj(2253),Dijkstra松弛条件的变形
  7. struts2的action的知识点和利用action向页面注入值的操作
  8. php的curl获取https加密协议请求返回json数据进行信息获取
  9. bzoj2243-染色(动态树lct)
  10. spring之注解详解
  11. php设计模式七 ---组合模式
  12. tar 打包压缩
  13. PAT基础6-7
  14. Qt 中用QProcess调用cmd命令
  15. linux系统添加指定uid和gid的用户和组
  16. 虚拟机中安装CentOS7
  17. css文件放在根目录之后不起作用原因
  18. spark[源码]-DAG调度器源码分析[二]
  19. 使用FormData实现ajax文件异步上传
  20. 求(3+开根5) N次方的整数部分最后3位

热门文章

  1. 修改gradle中央仓库,加快jar包下载速度
  2. [Codeforces1250E] The Coronation
  3. windows上安装python2和python3虚拟环境
  4. python运维开发常用模块(8)EXCEL操作模块XlsxWriter
  5. oracle中如何更改一个表的一个字段属性(名称,类型)
  6. python xpath图片爬取
  7. hdu-5573 Binary Tree
  8. vue中引入mintui、vux重构简单的APP项目
  9. 在.net中读写config文件的各种方法【转】
  10. 缘起 Dubbo ,讲讲 Spring XML Schema 扩展机制