博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1495 非常可乐
阅读量:5220 次
发布时间:2019-06-14

本文共 2218 字,大约阅读时间需要 7 分钟。

解题思路:简单的宽搜,见代码:

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 const int maxn = 105; 7 int S, n, m, cap[3], vis[maxn][maxn]; 8 9 struct node{10 int v[3];//每个子装的水11 int cnt; //倒水的次数12 bool friend operator < (node A, node B){13 return A.cnt > B.cnt; //cnt越小,优先级越高14 }15 }s, e;16 17 priority_queue
q; //优先队列18 19 int bfs()20 {21 while(!q.empty()) q.pop();22 q.push(s);23 24 while(!q.empty())25 {26 s = q.top(); q.pop();27 // printf("s.cnt = %d\n", s.cnt); //太大意,因为这行没注释,WA了一发28 29 //n杯子和s杯子各有一半可乐时返回倒水次数30 if(s.v[0] == S / 2 && s.v[2] == S / 2) return s.cnt;31 32 //i杯子往j杯子里面倒水33 for(int i = 0; i < 3; i++)34 for(int j = 0; j < 3; j++)35 {36 if(i == j) continue; //不能往自己的杯子倒水37 //如果i杯子是空的或者j杯子已满,则不用倒水38 if(s.v[i] == 0 || s.v[j] == cap[j]) continue;39 40 int t = min(s.v[i], cap[j] - s.v[j]); //自己思考这一步41 e = s; //这步不能忘了42 e.v[i] = s.v[i] - t, e.v[j] = s.v[j] + t, e.cnt = s.cnt + 1;43 if(!vis[e.v[0]][e.v[1]]) //没访问过44 {45 vis[e.v[0]][e.v[1]] = 1; //标记为已经访问46 q.push(e);47 }48 }49 }50 return -1; //若没有符合条件的,则返回-151 }52 53 int main()54 {55 while(~scanf("%d %d %d", &S, &n, &m) && (S || n || m))56 {57 if(S % 2) //s为奇数,则不可能均分58 {59 printf("NO\n");60 continue;61 }62 63 if(n == m) //n等于m时,直接把一个杯子倒满即可64 {65 printf("1\n");66 continue;67 }68 int tmp;69 //初始化n为更大的杯子70 if(m > n) tmp = n, n = m, m = tmp;71 memset(vis, 0, sizeof(vis));72 73 cap[0] = n, cap[1] = m, cap[2] = S;74 s.v[0] = 0, s.v[1] = 0, s.v[2] = S, s.cnt = 0;75 vis[0][0] = 1; 76 77 int ans = bfs();78 79 if(ans == -1) printf("NO\n");80 else printf("%d\n", ans);81 }82 return 0;83 }
View Code

 

转载于:https://www.cnblogs.com/loveprincess/p/4872539.html

你可能感兴趣的文章
T-SQL之触发器
查看>>
动态规划 -- “最”系列题目
查看>>
zoj 3349 dp + 线段树优化
查看>>
排序算法(六)快速排序
查看>>
apache 配置 Expire/Cache-Control 头
查看>>
Shell3
查看>>
STK卫星工具箱下载
查看>>
【转载】【贪心】各种覆盖问题
查看>>
Class path & Path
查看>>
接口测试入门(4)--接口自动化测试框架 / list和map用法 / 随机选取新闻 (随机数生成) / 接口相关id映射...
查看>>
Entity Framework 连接 mysql 。(code first模式)
查看>>
WinForm用户自定义控件,在主窗体加载时出现闪烁;调用用户控件出现闪烁,需要鼠标才能够显示...
查看>>
web开发快速提高工作效率的一些资源
查看>>
在react底下安装环境
查看>>
hdu4888 Redraw Beautiful Drawings(最大流)
查看>>
Java——一个类的加载过程
查看>>
objective-c 取消执行的延迟函数
查看>>
python——装饰器例子一个
查看>>
获取 metadata 的完整例子 - 每天5分钟玩转 OpenStack(166)
查看>>
C#注册表操作类(完整版)
查看>>