HDU1495 非常可乐
解题思路:简单的宽搜,见代码:
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<queue>
- using namespace std;
- const int maxn = ;
- int S, n, m, cap[], vis[maxn][maxn];
- struct node{
- int v[];//每个子装的水
- int cnt; //倒水的次数
- bool friend operator < (node A, node B){
- return A.cnt > B.cnt; //cnt越小,优先级越高
- }
- }s, e;
- priority_queue<node> q; //优先队列
- int bfs()
- {
- while(!q.empty()) q.pop();
- q.push(s);
- while(!q.empty())
- {
- s = q.top(); q.pop();
- // printf("s.cnt = %d\n", s.cnt); //太大意,因为这行没注释,WA了一发
- //n杯子和s杯子各有一半可乐时返回倒水次数
- if(s.v[] == S / && s.v[] == S / ) return s.cnt;
- //i杯子往j杯子里面倒水
- for(int i = ; i < ; i++)
- for(int j = ; j < ; j++)
- {
- if(i == j) continue; //不能往自己的杯子倒水
- //如果i杯子是空的或者j杯子已满,则不用倒水
- if(s.v[i] == || s.v[j] == cap[j]) continue;
- int t = min(s.v[i], cap[j] - s.v[j]); //自己思考这一步
- e = s; //这步不能忘了
- e.v[i] = s.v[i] - t, e.v[j] = s.v[j] + t, e.cnt = s.cnt + ;
- if(!vis[e.v[]][e.v[]]) //没访问过
- {
- vis[e.v[]][e.v[]] = ; //标记为已经访问
- q.push(e);
- }
- }
- }
- return -; //若没有符合条件的,则返回-1
- }
- int main()
- {
- while(~scanf("%d %d %d", &S, &n, &m) && (S || n || m))
- {
- if(S % ) //s为奇数,则不可能均分
- {
- printf("NO\n");
- continue;
- }
- if(n == m) //n等于m时,直接把一个杯子倒满即可
- {
- printf("1\n");
- continue;
- }
- int tmp;
- //初始化n为更大的杯子
- if(m > n) tmp = n, n = m, m = tmp;
- memset(vis, , sizeof(vis));
- cap[] = n, cap[] = m, cap[] = S;
- s.v[] = , s.v[] = , s.v[] = S, s.cnt = ;
- vis[][] = ;
- int ans = bfs();
- if(ans == -) printf("NO\n");
- else printf("%d\n", ans);
- }
- return ;
- }
HDU1495 非常可乐的更多相关文章
- HDU-1495 非常可乐(BFS)
广搜的灵活应用题: 非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU1495 非常可乐 —— BFS + 模拟
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 非常可乐 Time Limit: 2000/1000 MS (Java/Others) M ...
- HDU-1495 非常可乐 (嵌套结构体-广搜 对比 一般广搜)
题意 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但 ...
- HDU1495 非常可乐(BFS/数论)
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但see ...
- HDU小小练
hdu1253胜利大逃亡(bfs) 题意:就是城堡问题,找出可通行路径即可 思路:三维BFS,设定前后上下左右6个方向搜索,注意开始的时候人站的位置可以是墙. hdu1495非常可乐(bfs) 题意: ...
- 非常可乐(杭电hdu1495)bfs
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 非常可乐 HDU1495
BFS题 一共有六种状态转移 一一枚举就好 设置一个标记数组. 用二重循环可以很清晰的解决代码长的问题 #include<cstdio> #include<cstring> # ...
- 【HDU - 1495】非常可乐
-->非常可乐 Descriptions: 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一 ...
- hdoj 1495 非常可乐【bfs隐式图】
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- JavaScript基于对象编程
js面向对象特征介绍 javascript是一种面向(基于)对象的动态脚本语言,是一种基于对象(Object)和事件驱动(EventDirven)并具有安全性能的脚本语言.它具有面向对象语言所特有的各 ...
- js之数组常见的方法
主要介绍数组的一些常用的方法,方法多了,就容易混淆,结果就是方法用错,甚至不会用: 一.数组的定义: 1.字面量/直接量: var arr = [1, 2, 'js', 'java']; 2.通过内部 ...
- js中几个正则表达式相关函数使用时g标志的作用
首先,javascript中涉及到正则表达式的函数总共有6个,可分为两种: 1.第一种是作为字符串对象的方法,即以 String.fun(); 形式调用,这里包括 split.search.match ...
- java中静态代理跟动态代理之间的区别
文章转载于:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html 在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另 ...
- list, set操作
def union_list(l1, l2): result = [] if not l1: result.extend(l2) return result if not l2: result.ext ...
- tcp抓包 Wireshark 使用
fidder主要是针对http(s)协议进行抓包分析的,所以类似wireshark/tcpdump这种工作在tcp/ip层上的抓包工具不太一样,这种工具一般在chrome/firefox的开发者工具下 ...
- Struts2笔记——ONGL表达式语言
OGNL是ObjectGraphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts 2框架使用OGNL作为默认的表达式语言. ----------- ...
- linuxlcd驱动程序编写 mini2440(w35)
先说lcd驱动的框架吧! lcd驱动也有自己的框架,如果没有框架,要我们自己完成所有lcd驱动的代码编写那将是很痛苦的一件事. lcd驱动主要依赖于一个文件,fbmem.c 其实它还依赖几个文件 不 ...
- 【查找结构3】平衡二叉查找树 [AVL]
在上一个专题中,我们在谈论二叉查找树的效率的时候.不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找).如何解决这个问题呢?关键在于如何最大限度的减小树的深度.正是基于这 ...
- linux 安装scons
scons是一个Python写的自动化构建工具,需要安装python和scons后才能运行,能够跨平台.其集成功能类似于autoconf/automake ,是一个简洁可靠的工具.现在很多系统都自带 ...