UVa 10603 倒水问题
https://vjudge.net/problem/UVA-10603
题意:三个杯子,倒水问题。找出最少倒水量。
思路:路径寻找问题。不难,暴力枚举。
#include<iostream>
#include<queue>
#include<string>
#include<cstring>
using namespace std; int a, b, c, d;
int vis[][]; //访问变量,因为只有三个杯子,所以记录前两个杯子的状态即可
int cap[];
int ans[]; struct Node
{
int v[], dist;
bool operator <(const Node& rhs) const //重载小于号
{
return dist>rhs.dist;
}
}; void update(Node u) //每次有新状态时,记录形成d升水时需要的最少倒水量
{
for (int i = ; i < ; i++)
{
int x = u.v[i];
if (ans[x] < || u.dist < ans[x]) ans[x] = u.dist;
}
} void bfs()
{
cap[] = a, cap[] = b, cap[] = c; //记录三个杯子的容量
memset(vis, , sizeof(vis));
memset(ans, -, sizeof(ans));
priority_queue<Node> q;
Node start;
start.v[] = ; start.v[] = ; start.v[] = c; start.dist = ;
q.push(start);
vis[][] = ; //设置初始状态为已访问
while (!q.empty())
{
Node p = q.top();
q.pop(); update(p);
if (ans[d] >= ) break; //找到目标状态,退出循环 for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{ if (i != j && p.v[i]!= && p.v[j]<cap[j]) //不能给自己倒水并且第i个杯子有水和第j个杯子未满
{
Node u=p; //建立新状态
int r = cap[j] - p.v[j]; //计算第j个杯子空余水量
if (p.v[i] >= r) //如果第i个杯子水量充足
{
u.dist = p.dist + r; //更新后的倒水量
u.v[j] = p.v[j] + r; //更新后第j个杯子水量
u.v[i] = p.v[i] - r; //更新后第i个杯子水量
}
else //如果第i个杯子水量不足
{
u.dist = p.dist + p.v[i];
u.v[j] = p.v[j] + p.v[i];
u.v[i] = ;
}
if(!vis[u.v[]][u.v[]]) //如果该状态没出现过
{
vis[u.v[]][u.v[]] = ;
q.push(u);
}
} }
} } while (d >= )
{
if (ans[d] >= )
{
cout << ans[d] << " " << d << endl;
return;
}
d--; //如果无法做到d升,则检验d--,找到最接近d升
}
} int main()
{
//freopen("D:\\txt.txt","r", stdin);
int n;
cin >> n;
while (n--)
{
cin >> a >> b >> c >> d;
bfs();
}
return ;
}
UVa 10603 倒水问题的更多相关文章
- 倒水问题(Fill, UVa 10603)
[题目描述] 有三个没有刻度的水壶,容量分别为a,b和c(单位为升,都是<=200的正整数).初始时前两个水壶是空的,而第三个装满了水.每次可以从一个水壶往一个水壶里倒水,直到一个水壶倒空或者另 ...
- 倒水问题UVA 10603——隐式图&&Dijkstra
题目 给你三个容量分别为 $a,b,c$ 的杯子,最初只有第3个杯子装满了水,其他两个杯子为空.最少需要到多少水才能让一个某个杯子中的水有 $d$ 升呢?如果无法做到恰好 $d$ 升,就让某个杯子里的 ...
- UVa 10603 Fill (BFS && 经典模拟倒水 && 隐式图)
题意 : 有装满水的6升的杯子.空的3升杯子和1升杯子,3个杯子中都没有刻度.不使用道具情况下,是否可量出4升水呢? 你的任务是解决一般性的问题:设3个杯子的容量分别为a, b, c,最初只有第3个杯 ...
- 倒水问题(Fill,UVA 10603) lrj白书 p202
看着lrj的代码自己敲了一遍,还没调试成功.... 有时间再进行完善 /* 状态start到各个状态u1,u2,u3..... 的倒水量分别为u1.dist,u2.dist,u3.dist.... * ...
- UVA 10603 - Fill BFS~
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&c ...
- UVA 10603 Fill
题意: 题目的意思是倒水,给出的四个数据是第一个水杯,第二个水杯,第三个水杯,和目标水量.一开始只有第三个水杯是满的,剩下的水杯是空的.倒水的时候只能把倒水出来的这个杯子倒空,或是倒水进去的杯子倒满. ...
- UVA 10603 Fill(正确代码尽管非常搓,网上很多代码都不能AC)
题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=1544">click here~ ...
- UVa 10603 Fill (暴力BFS+优先队列)
题意:给定4个数,a,b,c,d,分别代表空杯子容积为a,b,一个盛满水的杯子容积为c,让你不断倒水,找一个dd,是不是存在某个时刻, 某个杯子里的水dd,和d相同,或者无限接近.让求最少的倒水量和d ...
- UVA - 10603 Fill(隐式图搜索)
题目大意:经典的倒水问题. 给你三个瓶子,体积为a,b,c. 刚開始a.b是空的,c是满的,如今要求你到出体积为d的水.倒水的规则为,要么倒水方为空,要么接水方满 问倒到容量为d时,倒水的最小体积是多 ...
随机推荐
- 【剑指offer】栈的压入、弹出序列
一.题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该 ...
- Vue 过渡
过渡 通过 Vue.js 的过渡系统,可以在元素从 DOM 中插入或移除时自动应用过渡效果.Vue.js 会在适当的时机为你触发 CSS 过渡或动画,你也可以提供相应的 JavaScript 钩子函数 ...
- PHP Warning: preg_match(): JIT compilation failed: no more memory in
PHP7.3出现如下错误:PHP Warning: preg_match(): JIT compilation failed: no more memory in ... 解决方案: 修改 /usr/ ...
- 5分钟实现集群-NTP时间同步
环境:VMware-Workstation-12-Pro,Windows-10,CentOS-7.5,Xshell5 NTP基本介绍 NTP(Network TimeProtocol,网络时间协议), ...
- angular $scope.$watch
在$scope内置的所有函数中,用得最多的可能就是$watch 函数了.当你的数据模型中某一部分发生变化时,$watch函数可以向你发出通知. 你可以监控单个对象的属性,也可以监控需要经过计算的结果( ...
- python中 staticmethod与classmethod
原文地址https://blog.csdn.net/youngbit007/article/details/68957848 原文地址https://blog.csdn.net/weixin_3565 ...
- npm的.npmrc文件在哪里?缓存及全局包文件在什么位置?
npm的.npmrc文件在哪里?缓存及全局包文件在什么位置? npm作为node开发过程中的必备工具,长期使用之后,您可能会想:这些全局安装的node包都放在硬盘里面的哪个地方?配置文件.npmr ...
- 7.8 Models -- The Rest Adapter
一.概述 默认的,store将会使用 DS.RESTAdapter来加载和存储records.这个RESTAdapter假定URLS和JSON关联每一个model是约定好的:这意味着,如果你遵循这个规 ...
- Docker深入浅出3-容器管理
docker客户端非常简单,我们可以直接输入docker命令来查看Docker客户端所有的命令项 [root@admin-fxr ~]# docker Usage: docker COMMAND A ...
- 134. Gas Station(数学定理依赖题)
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...