传送门

题意:给定三个杯子容量分别为k,n,m(1~100),k=n+m。最开始水的体积分别为(k,0,0)。问是否可以通过倾倒使某两杯的水的体积都为k/2,如果不能打印"NO",如果能打印倾倒次数(被子没有刻度,所以只能将这一杯倒完或者将另一杯倒满)。

题解:常规操作了,直接暴力bfs,就怕遇到题不知道用bfs——暴力出奇迹,简单有好写。

代码:

#include <string.h>#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>// #define int long long
#define pb push_back
#define mst(a, i) memset(a, i, sizeof(a))
#define dbg(x) cout << #x << "===" << x << endl
using namespace std;
void read(int &x) {int res = 0, f = 1;char c = getchar();while (c < '0' || c > '9') {if (c == '-') f = -1;c = getchar();}while (c >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - '0'), c = getchar();x = f * res;
}
void OUT(int x) {if (x < 0) putchar('-'), x = -x;if (x > 9) OUT(x / 10);putchar(x % 10 + '0');
}
void print(int a, char c) { OUT(a), putchar(c); }const int maxn = 1e2 + 10;
const int mod = 1e9 + 7;struct node {int x, y, z;node() {}node(int _x, int _y, int _z) { x = _x, y = _y, z = _z; }
};
int k, n, m;  // cup:::a,b,c
int ans;
int dp[maxn][maxn][maxn];bool ok(int x, int y, int z) {if (x >= 0 && x <= k && y >= 0 && y <= n && z >= 0 && z <= m &&dp[x][y][z] == -1)return true;return false;
}
bool bfs() {if (k % 2 == 1) return false;queue<node> q;q.push(node(k, 0, 0));dp[k][0][0] = 0;while (!q.empty()) {node now = q.front();q.pop();int x = now.x, y = now.y, z = now.z;if (x == k / 2 || y == k / 2 || z == k / 2) {ans = dp[x][y][z];if (x && y && z) ans++;  //并不是已经有两杯都为k/2的情况return true;}// a->b{int nx, ny, nz;  //局部变量,以免“引起误会”。nz = z, nx = max(0, x - (n - y)), ny = k - nz - nx;if (ok(nx, ny, nz))q.push(node(nx, ny, nz)), dp[nx][ny][nz] = dp[x][y][z] + 1;}  // a->c{int nx, ny, nz;ny = y, nx = max(0, x - (m - z)), nz = k - ny - nx;if (ok(nx, ny, nz))q.push(node(nx, ny, nz)), dp[nx][ny][nz] = dp[x][y][z] + 1;}// b->c{int nx, ny, nz;nx = x, ny = max(0, y - (m - z)), nz = k - nx - ny;if (ok(nx, ny, nz))q.push(node(nx, ny, nz)), dp[nx][ny][nz] = dp[x][y][z] + 1;}// b->a{int nx, ny, nz;nz = z, ny = max(0, y - (k - x)), nx = k - ny - nz;if (ok(nx, ny, nz))q.push(node(nx, ny, nz)), dp[nx][ny][nz] = dp[x][y][z] + 1;}// c->b{int nx, ny, nz;nx = x, nz = max(0, z - (n - y)), ny = k - nx - nz;if (ok(nx, ny, nz))q.push(node(nx, ny, nz)), dp[nx][ny][nz] = dp[x][y][z] + 1;}// c->a{int nx, ny, nz;ny = y, nz = max(0, z - (k - x)), nx = k - ny - nz;if (ok(nx, ny, nz))q.push(node(nx, ny, nz)), dp[nx][ny][nz] = dp[x][y][z] + 1;}}return false;
}
void init() { mst(dp, -1); }
signed main() {while (cin >> k >> n >> m) {if (k == 0) break;if (n > m) swap(n, m);init();bool f = bfs();if (!f)puts("NO");elseprint(ans, '\n');}return 0;
}

HDU-1495-非常可乐相关推荐

  1. HDU 1495 非常可乐

    - HDU 1495 - 非常可乐 Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和 ...

  2. HDU - 1495 非常可乐(BFS,数学)

    HDU - 1495 非常可乐(BFS,数学) 巨佬的数学解法 #include<iostream> using namespace std; int gcd(int a,int b) { ...

  3. HDU 1495 非常可乐

    非常可乐 http://acm.hdu.edu.cn/showproblem.php?pid=1495 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  4. HDU 1495 非常可乐(数论,BFS)

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  5. HDU 1495(非常可乐)

    Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且 ...

  6. HDU - 1495 - 非常可乐

    先上题目: 非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. hdu 1495 非常可乐 (bfs)

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. HDU 1495 非常可乐(BFS||数论)

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. Hdu 1495 非常可乐、BFS、模拟:【题解】

    非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Descri ...

  10. hdu 1495 非常可乐(BFS)

    题目链接:hdu1495 共有6种操作,x-->y,x-->z,y-->x,y-->z,z-->x,z-->y #include<stdio.h> #i ...

最新文章

  1. 在SpringBoot启动类上添加ComponentScan出现springbootapplication already applies given @ComponentScan
  2. 日本农商巨头50年布局多个领域 对话国际农民丰收节贸易会
  3. Docker 基础技术之 Linux namespace 源码分析
  4. Android之Android studio基本调试和快捷键
  5. 工作23:vue---封装request做数据请求
  6. PyODPS 安装常见问题解决
  7. python 读取txt文件没读到400行_400行Python代码实现文语处理助手(3) - 音频显示-嵌入式系统-与非网...
  8. [Unity2018.3新功能]Prefab嵌套和变体
  9. 6点叫醒全员的腾讯是枕戈待旦,还是如李彦宏说的“新瓶装旧酒”
  10. 这一次,苹果、Google、微软选择了统一战线!
  11. 一点关于MD5计算的封装
  12. typeof应该注意的地方(网龙公司校招笔试题)
  13. PHP找出专题下重复的商品数据
  14. CodeForces914 D.Bash and a Tough Math Puzzle(线段树)
  15. 计算机网络体系结构图解
  16. java读写yml文件
  17. Qt编写安防视频监控系统65-子模块9数据调试
  18. 蓝牙SCO与ACL链路
  19. 微信小程序如何在地图选择地址并返回经纬度
  20. apollo新增扩展consul注册中心

热门文章

  1. js打印pdf 使用Adobe reader 打印pdf
  2. 北京大学计算机专业王腾,王腾-青年学者-北大地空学院
  3. 联想扬天计算机排行,联想电脑CPU天梯图排行榜,2018联想电脑CPU天梯图新版
  4. android状态栏黑色字体,时间电池深色
  5. 摄影测量学期末复习总结
  6. 【2020】明哥版-JetBrains旗下常用开发工具教程目录更新中-建议收藏
  7. Java 编程问题:十三、HTTP 客户端和 WebSocket API
  8. 区间划定最小值题解--单调队列
  9. git commit -m 撤销操作
  10. Uber AVS 自动驾驶可视化工具(一)