hdu 1495 非常可乐
来源:互联网 发布:网站美工是做什么的 编辑:程序博客网 时间:2024/05/01 10:38
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495
倒水问题直接bfs爆搜,注意一下边界。。
#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<vector>#include<queue>#include<map>using std::cin;using std::cout;using std::endl;using std::find;using std::sort;using std::map;using std::pair;using std::queue;using std::vector;using std::multimap;#define pb(e) push_back(e)#define sz(c) (int)(c).size()#define mp(a, b) make_pair(a, b)#define all(c) (c).begin(), (c).end()#define iter(c) decltype((c).begin())#define cls(arr,val) memset(arr,val,sizeof(arr))#define cpresent(c, e) (find(all(c), (e)) != (c).end())#define rep(i, n) for (int i = 0; i < (int)(n); i++)#define tr(c, i) for (iter(c) i = (c).begin(); i != (c).end(); ++i)const int Max_N = 110;typedef unsigned long long ull;bool vis[Max_N][Max_N][Max_N];int N, M, S;struct Node { int x, y, z, s; Node(int i = 0, int j = 0, int k = 0, int l = 0) :x(i), y(j), z(k), s(l) {}};inline bool judge(const Node &q) { int t = S >> 1; if (q.x == t && q.y == t) return true; if (q.x == t && q.z == t) return true; if (q.y == t && q.x == t) return true; if (q.y == t && q.z == t) return true; if (q.z == t && q.y == t) return true; if (q.z == t && q.x == t) return true; return false;}int bfs() { if (S & 1) return 0; int v; cls(vis, false); queue<Node> q; q.push(Node(S, 0, 0, 0)); vis[S][0][0] = true; while (!q.empty()) { Node t = q.front(); q.pop(); if (judge(t)) return t.s; if (t.x > 0 && t.y < N) { v = N - t.y; if (v < t.x && !vis[t.x - v][N][t.z]) { q.push(Node(t.x - v, N, t.z, t.s + 1)); vis[t.x - v][N][t.z] = true; } else { if (t.x + t.y <= N && !vis[0][t.x + t.y][t.z]) { q.push(Node(0, t.x + t.y, t.z, t.s + 1)); vis[0][t.x + t.y][t.z] = true; } } } if (t.x > 0 && t.z < M) { v = M - t.z; if (v < t.x && !vis[t.x - v][t.y][M]) { q.push(Node(t.x - v, t.y, M, t.s + 1)); vis[t.x - v][t.y][M] = true; } else { if (t.z + t.x <= M && !vis[0][t.y][t.z + t.x]) { q.push(Node(0, t.y, t.x + t.z, t.s + 1)); vis[0][t.y][t.x + t.z] = true; } } } if (t.y > 0 && t.x < S) { v = S - t.x; if (v < t.y && !vis[S][t.y - v][t.z]) { q.push(Node(S, t.y - v, t.z, t.s + 1)); vis[S][t.y - v][t.z] = true; } else { if (t.x + t.y <= S && !vis[t.x + t.y][0][t.z]) { q.push(Node(t.x + t.y, 0, t.z, t.s + 1)); vis[t.x + t.y][0][t.z] = true; } } } if (t.y > 0 && t.z < M) { v = M - t.z; if (v < t.y && !vis[t.x][t.y - v][M]) { q.push(Node(t.x, t.y - v, M, t.s + 1)); vis[t.x][t.y - v][M] = true; } else { if (t.z + t.y <= M && !vis[t.x][0][t.z + t.y]) { q.push(Node(t.x, 0, t.z + t.y, t.s + 1)); vis[t.x][0][t.z + t.y] = true; } } } if (t.z > 0 && t.y < N) { v = N - t.y; if (v < t.z && !vis[t.x][N][t.z - v]) { q.push(Node(t.x, N, t.z - v, t.s + 1)); vis[t.x][N][t.z - v] = true; } else { if (t.y + t.z <= N && !vis[t.x][t.y + t.z][0]) { q.push(Node(t.x, t.z + t.y, 0, t.s + 1)); vis[t.x][t.z + t.y][0] = true; } } } if (t.z > 0 && t.x < S) { v = S - t.x; if (v < t.z && !vis[S][t.y][t.z - v]) { q.push(Node(S, t.y, t.z - v, t.s + 1)); vis[S][t.y][t.z - v] = true; } else { if (t.x + t.z <= S && !vis[t.x + t.z][t.y][0]) { q.push(Node(t.x + t.z, t.y, 0, t.s + 1)); vis[t.x + t.z][t.y][0] = true; } } } } return 0;}int main() {#ifdef LOCAL freopen("in.txt", "r", stdin); freopen("out.txt", "w+", stdout);#endif while (~scanf("%d %d %d", &S, &N, &M) && S + M + N) { int res = bfs(); if (!res) puts("NO"); else printf("%d\n", res); } return 0;}
0 0
- hdu 1495 非常可乐
- hdu 1495 非常可乐
- HDU 1495 非常可乐
- hdu 1495 非常可乐
- HDU 1495 非常可乐
- hdu 1495 非常可乐
- HDU 1495 非常可乐
- HDU 1495 非常可乐
- Hdu 1495 非常可乐
- HDU-1495-非常可乐
- hdu 1495 非常可乐
- HDU 1495 非常可乐
- HDU - 1495 非常可乐
- hdu 1495 非常可乐
- HDU 1495 非常可乐
- hdu-1495-非常可乐
- HDU 1495 非常可乐
- 非常可乐 hdu 1495
- Android MVC 实例
- 《数据结构与算法分析C++》 维斯 第一章 笔记
- java主函数初始化spring和log4j测试环境
- 在JAVA中怎么清空StringBuffer变量内容
- See Electrical 7 R2 B11电气设计软件PLS-CADD v12.3架空电力线设计软件
- hdu 1495 非常可乐
- 用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。用1、2、2、3、4、5这六
- [原]CI环境下开发Oauth2.0开放平台
- C#设计模式学习笔记-单例模式
- 开始SDN
- 文件基本操作示例-文件读写
- Error Code: 1175. You are using safe update mode
- http://www.51zxw.net/study.asp?vip=11042319
- IOS开发笔记 - 基于SDWebImage的网络图片加载处理