描述

设有大小不等的三个无刻度的油桶,分别能盛满x,y,z公升油。初始时,第一个油桶盛满油,第二、三个油桶为空,在某一个油桶上分出targ公升油。

输入

输入包含多组测试数据。每组数据包含一行。分别x,y,z,targ四个整数,x,y,z,targ都大于 等于0,且小于32767。

输出

对应每组输出YES或者NO。如果可以分出targ公升油就输出YES,否则就输出NO。

样例输入

80 50 30 40

样例输出

YES

提示

使用队列。分油过程中,由于油桶上没有刻度,只能将油桶倒满或者倒空。三个油桶盛油的总量始终等于初始时第一个油桶盛满的油量。
题意
给你3个油桶,初始化第一个装满,第二个第三个为空,求能否有一个桶为targ升油,不能有丢弃
题解
一开始没读懂题意,傻逼了半天,题目读懂后就很easy了
这里用广搜搜索所有情况就行了,很暴力很无脑
这里由于X,Y,Z有点大,存状态开三维数组爆内存,这里用了map中的哈希思想
代码
 #include<bits/stdc++.h>
using namespace std;
struct Node
{
int x,y,z;
Node(int x,int y,int z):x(x),y(y),z(z){}
};
string To_string(int x,int y,int z)
{
stringstream ss;
ss<<x;ss<<y;ss<<z;
return ss.str();
}
int main()
{
int x,y,z,targ;
while(scanf("%d%d%d%d",&x,&y,&z,&targ)!=EOF)
{
int flag=;
queue<Node> q;
map<string,int> ma;
q.push(Node(x,,));
while(!q.empty())
{
Node h=q.front();q.pop();
if(h.x==targ||h.y==targ||h.z==targ){flag=;break;}//成功
if(ma[To_string(h.x,h.y,h.z)])continue;//状态有过,跳过
ma[To_string(h.x,h.y,h.z)]=;//标记 if(h.x+h.y<=y)q.push(Node(,h.x+h.y,h.z));//x->y不会溢出,全倒过去
else q.push(Node(h.x-y+h.y,y,h.z));//x->y会溢出,y倒满 if(h.x+h.z<=z)q.push(Node(,h.y,h.x+h.z));//x->z
else q.push(Node(h.x-z+h.z,y,z)); if(h.x+h.y<=x)q.push(Node(h.x+h.y,,h.z));//y->x
else q.push(Node(x,h.y-x+h.x,h.z)); if(h.y+h.z<=z)q.push(Node(h.x,,h.y+h.z));//y->z
else q.push(Node(h.x,h.y-z+h.z,z)); if(h.x+h.z<=x)q.push(Node(h.x+h.z,h.y,));//z->x
else q.push(Node(x,h.y,h.z-x+h.x)); if(h.y+h.z<=y)q.push(Node(x,h.y+h.z,));//z->y
else q.push(Node(h.x,y,h.z-y+h.y));
}
printf("%s\n",flag?"YES":"NO");
}
return ;
}

最新文章

  1. from表单提交数据之后,后台对象接受不到值
  2. 转《UNIX编程艺术》读书心得
  3. interactivePopGestureRecognizer
  4. JQuery------获取&lt;input type=&quot;file&quot;&gt;中的文件内容
  5. unix-ln 命令
  6. wxpython 基本的控件 (文本)
  7. Core Data 使用
  8. .NET正则基础——.NET正则类及方法应用
  9. Cocos2d-x开发中C++内存管理
  10. uCGUI窗口的创建过程分析
  11. Linux操作系统的LILO详解
  12. jQuery获取select、checkbox、radio的方法总结
  13. Java反射机制(转载)
  14. Windows 驱动开发 - 5
  15. linux生成随机密码
  16. js动态给table添加行(tr)
  17. Java threadpool机制深入分析
  18. Web Service简单入门示例
  19. JSP导出Excel后身份证后三位为0
  20. Host文件修改后无效的解决办法

热门文章

  1. Java的反射机制与泛型擦除
  2. Dubbo的优化 --- 开发时使用
  3. linux集群时间同步搭建
  4. C++11并发之std::thread&lt;转&gt;
  5. ncnn 源码学习-Mat.h Mat.c
  6. 打开Delphi 10.2提示脚本错误的解决方法
  7. Cookie安全小结
  8. JULIA BOORSTIN — Interview a Broadcaster!
  9. Linux创建SSH信任关系
  10. tf.identity 个人理解