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 ...
随机推荐
- Android内存泄漏问题(一)
前言 不少人认为JAVA程序,因为有垃圾回收机制,应该没有内存泄露. 其实如果我们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用, ...
- Difference Between Initialization and Assignment in C++
Initialization happens when a variable is given a value at the moment it is created. Assignment obli ...
- Win7系统配置IIS7服务
1.开启IIS7服务 打开控制面板,选择并进入“程序”,双击“打开或关闭Windows服务”,在弹出的窗口中选择“Internet信息服务”下面所有地选项,点击确定后,开始更新服务. 2.安装web文 ...
- 通过HTTP头控制浏览器的缓存
通过HTTP头控制浏览器的缓存 浏览器缓存是提高用户体验和提升程序性能的一个很重要的途径,通过浏览器的缓存控制,可以对实时性要求不高的数据进行缓存,可以减少甚至不需要再次对服务器的请求就可以显示数据. ...
- ***Xcode Interface Builder或Storyboard中可建立那两种连接?
在Xcode Interface Builder或Storyboard中,可建立到输出口(IBOutlet)和操作(方法,IBAction)的连接. IBOutlet are for output C ...
- php怎么获取checkbox复选框的内容?
由于checkbox属性,所有必须把checkbox复选择框的名字设置为一个如果checkbox[],php才能读取,以数据形式,否则不能正确的读取checkbox复选框的值哦. <form n ...
- POJ 2007 Scrambled Polygon (简单极角排序)
题目链接 题意 : 对输入的点极角排序 思路 : 极角排序方法 #include <iostream> #include <cmath> #include <stdio. ...
- java重构、重载、重写
重构:就是代码优化,或则你可以理解为代码的修改! 例:开始你的类名是A现在要改为B也称为重构的一种 重载:发生在同一类中,方法名相同,参数列表不同 重写:发生在父子类中,子类中有 ...
- TCP网络拥塞控制
拥塞控制过程 数据吞吐量 TCP窗口大小,窗口流量控制,慢启动对TCP的成块数据传输综合作用,可能对TCP的数据传输有意想不到的影响. RTT(Round-Trip Time) :往返时间.是指一个报 ...
- c#实现打印功能,可以设置纸张大小,字体和颜色等
/// <summary> /// 打印的按钮 /// </summary> /// <param name="sender"></par ...