HDU1495:非常可乐(BFS)
思路:将所有状态进行一次广搜即可,代码虽长,但基本都是复制粘贴
#include <string.h>
#include <stdio.h>
#include <queue>
using namespace std;
int s,n,m;
int vis[105][105][105];
struct node
{
int s,n,m,step;
};
int check(int x,int y,int z)//平分条件
{
if(x == 0 && y == z)
return 1;
if(y == 0 && x == z)
return 1;
if(z == 0 && x == y)
return 1;
return 0;
}
int bfs()
{
queue<node> Q;
node a,next;
a.s = s;
a.n = 0;
a.m = 0;
a.step = 0;
vis[s][0][0] = 1;
Q.push(a);
while(!Q.empty())
{
a = Q.front();
Q.pop();
if(check(a.s,a.n,a.m))
return a.step;
if(a.n)//当n杯中还有
{
if(a.n>s-a.s)//将n杯倒入s杯中能将s杯倒满
{
next = a;
next.n = next.n-(s-a.s);
next.s = s;
if(!vis[next.s][next.n][next.m])
{
next.step = a.step+1;
Q.push(next);
vis[next.s][next.n][next.m] = 1;
}
}
else//将n杯倒入s杯中不能将s杯倒满
{
next = a;
next.s = next.n+next.s;
next.n = 0;
if(!vis[next.s][next.n][next.m])
{
next.step = a.step+1;
Q.push(next);
vis[next.s][next.n][next.m] = 1;
}
}
if(a.n>m-a.m)//将n杯倒入m杯中能将m杯倒满
{
next = a;
next.n = next.n-(m-a.m);
next.m = m;
if(!vis[next.s][next.n][next.m])
{
next.step = a.step+1;
Q.push(next);
vis[next.s][next.n][next.m] = 1;
}
}
else//将n杯倒入m杯中不能将m杯倒满
{
next = a;
next.m = next.n+next.m;
next.n = 0;
if(!vis[next.s][next.n][next.m])
{
next.step = a.step+1;
Q.push(next);
vis[next.s][next.n][next.m] = 1;
}
}
}
if(a.m)//同上
{
if(a.m>s-a.s)
{
next = a;
next.m = next.m-(s-a.s);
next.s = s;
if(!vis[next.s][next.n][next.m])
{
next.step = a.step+1;
Q.push(next);
vis[next.s][next.n][next.m] = 1;
}
}
else
{
next = a;
next.s = next.m+next.s;
next.m = 0;
if(!vis[next.s][next.n][next.m])
{
next.step = a.step+1;
Q.push(next);
vis[next.s][next.n][next.m] = 1;
}
}
if(a.m>n-a.n)
{
next = a;
next.m = next.m-(n-a.n);
next.n = n;
if(!vis[next.s][next.n][next.m])
{
next.step = a.step+1;
Q.push(next);
vis[next.s][next.n][next.m] = 1;
}
}
else
{
next = a;
next.n = next.m+next.n;
next.m = 0;
if(!vis[next.s][next.n][next.m])
{
next.step = a.step+1;
Q.push(next);
vis[next.s][next.n][next.m] = 1;
}
}
}
if(a.s)//同上
{
if(a.s>n-a.n)
{
next = a;
next.s = next.s-(n-a.n);
next.n = n;
if(!vis[next.s][next.n][next.m])
{
next.step = a.step+1;
Q.push(next);
vis[next.s][next.n][next.m] = 1;
}
}
else
{
next = a;
next.n = next.s+next.n;
next.s = 0;
if(!vis[next.s][next.n][next.m])
{
next.step = a.step+1;
Q.push(next);
vis[next.s][next.n][next.m] = 1;
}
}
if(a.s>m-a.m)
{
next = a;
next.s = next.s-(m-a.m);
next.m = m;
if(!vis[next.s][next.n][next.m])
{
next.step = a.step+1;
Q.push(next);
vis[next.s][next.n][next.m] = 1;
}
}
else
{
next = a;
next.m = next.m+next.s;
next.s = 0;
if(!vis[next.s][next.n][next.m])
{
next.step = a.step+1;
Q.push(next);
vis[next.s][next.n][next.m] = 1;
}
}
}
}
return 0;
}
int main()
{
int ans;
while(~scanf("%d%d%d",&s,&n,&m),s||n||m)
{
if(s%2)//奇数肯定不能平分,因为被子是整数体积大小
{
printf("NO\n");
continue;
}
memset(vis,0,sizeof(vis));
ans = bfs();
if(ans)
printf("%d\n",ans);
else
printf("NO\n");
}
return 0;
}
HDU1495:非常可乐(BFS)相关推荐
- HDU1495 非常可乐【倒水问题+BFS】
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 【HDU1495非常可乐】【POJ3414Pots】
HDU1495非常可乐 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和se ...
- HDU1495 非常可乐
问题链接:HDU1495 非常可乐. 题意简述:平分液体问题.输入s.n和m三个数,分别代表可乐和2个杯子,三个容器可以互相倒,问能不能把s中的可乐平分,能的话输出最小倒杯子的次数,不能就输出NO. ...
- HDU1495 非常可乐 【BFS】
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- hdu1495 非常可乐(bfs)
Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且 ...
- hdu 1495 非常可乐 (bfs)
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 1495 非常可乐(BFS||数论)
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU-1459.非常可乐(BFS )
这道题TLE了很多次,原来一直以为将数字化为最简可以让运算更快,但是去了简化之后才发现,真正耗时的就是化简....还和队友学到了用状态少直接数组模拟刚就能过... 本题大意:给出可乐的体积v1,给出两 ...
- hdu 1495非常可乐 BFS
文章目录 AC代码 TLE ???为啥啊?不知道哪里不对,导致超时 对比发现,超时和输出使用cin等 无关,貌似是pour函数采用传参的方法就会超时,需要使用全局变量才不会超时 = = ... AC代 ...
最新文章
- 【机器学习基础】算法工程师必备的机器学习--EM
- 三维重建9:点云图像的滤波方法小结
- SAP Cloud for Customer的产品主数据通过PI同步到CRM
- java移动端接口测试_走进Java接口测试之测试框架TestNG数据驱动(入门篇)
- 2002. [HNOI2010]弹飞绵羊【LCT】
- SLAM--Pangolin显示相机位姿
- FusionChartsFree在JSP中的用法
- 【bzoj1143: [CTSC2008]祭祀river】有向无环图的最长反链
- WEB学习第四天(网页模型
- android代码签名和混淆打包
- 重庆邮电大学计算机学硕考研经验,重庆邮电大学计算机考研复试备考经验及经过...
- Oracle学习——dmp文件(表)导入与导出
- java--案例:[Random]随机100-200的数、班级点名器、控制台输入三个数,输出最大值,或最小值?
- STM32—LED单灯闪烁之软件延时
- 国际版阿里云短信对接
- web 移动端开发基础
- cisco 华三 对接_H3C交换机与Cisco交换机STP协议对接注意事项
- I.MX6ULL开发板基于阿里云项目实战 6:遇到的问题,解决方法及项目总结
- js获取随机数与随机颜色函数的简单封装
- [HNOI2006]公路修建问题 ——二分答案+krukal(蒟弱个人总结)
热门文章
- 【AUTOSAR-COM】-9.1-Tx/Rx Ipdu两种处理模式:IMMEDIATE和DEFERRED详解
- 北京周边1-5小时高铁出行旅游攻略!
- CSS中line-height属性
- 宏碁E5-471G-57WZ拆机加内存图解
- ARM GIC(五) ARM TrustZone如何支持安全中断 分析笔记。
- arduino新手入门详细教程系列之【Ⅱ:arduino编程环境配置】
- Cache原理简介及cache miss
- 计算机专业工作紧张熬夜吗,性别:男,年龄:35,合肥,从事工作:计算机,性格内向,生活和工作压力大,人好紧张焦虑,前几年总是加.....
- 前58同城高级副总裁宋波及总监郭冬涉嫌受贿被警方刑拘
- tpm2-tools 使用方法