HDU-1495-非常可乐
传送门
题意:给定三个杯子容量分别为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-非常可乐相关推荐
- HDU 1495 非常可乐
- HDU 1495 - 非常可乐 Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和 ...
- HDU - 1495 非常可乐(BFS,数学)
HDU - 1495 非常可乐(BFS,数学) 巨佬的数学解法 #include<iostream> using namespace std; int gcd(int a,int b) { ...
- HDU 1495 非常可乐
非常可乐 http://acm.hdu.edu.cn/showproblem.php?pid=1495 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- HDU 1495 非常可乐(数论,BFS)
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 1495(非常可乐)
Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且 ...
- HDU - 1495 - 非常可乐
先上题目: 非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 1495 非常可乐 (bfs)
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 1495 非常可乐(BFS||数论)
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Hdu 1495 非常可乐、BFS、模拟:【题解】
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Descri ...
- hdu 1495 非常可乐(BFS)
题目链接:hdu1495 共有6种操作,x-->y,x-->z,y-->x,y-->z,z-->x,z-->y #include<stdio.h> #i ...
最新文章
- 在SpringBoot启动类上添加ComponentScan出现springbootapplication already applies given @ComponentScan
- 日本农商巨头50年布局多个领域 对话国际农民丰收节贸易会
- Docker 基础技术之 Linux namespace 源码分析
- Android之Android studio基本调试和快捷键
- 工作23:vue---封装request做数据请求
- PyODPS 安装常见问题解决
- python 读取txt文件没读到400行_400行Python代码实现文语处理助手(3) - 音频显示-嵌入式系统-与非网...
- [Unity2018.3新功能]Prefab嵌套和变体
- 6点叫醒全员的腾讯是枕戈待旦,还是如李彦宏说的“新瓶装旧酒”
- 这一次,苹果、Google、微软选择了统一战线!
- 一点关于MD5计算的封装
- typeof应该注意的地方(网龙公司校招笔试题)
- PHP找出专题下重复的商品数据
- CodeForces914 D.Bash and a Tough Math Puzzle(线段树)
- 计算机网络体系结构图解
- java读写yml文件
- Qt编写安防视频监控系统65-子模块9数据调试
- 蓝牙SCO与ACL链路
- 微信小程序如何在地图选择地址并返回经纬度
- apollo新增扩展consul注册中心