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 倒水问题的更多相关文章

  1. 倒水问题(Fill, UVa 10603)

    [题目描述] 有三个没有刻度的水壶,容量分别为a,b和c(单位为升,都是<=200的正整数).初始时前两个水壶是空的,而第三个装满了水.每次可以从一个水壶往一个水壶里倒水,直到一个水壶倒空或者另 ...

  2. 倒水问题UVA 10603——隐式图&&Dijkstra

    题目 给你三个容量分别为 $a,b,c$ 的杯子,最初只有第3个杯子装满了水,其他两个杯子为空.最少需要到多少水才能让一个某个杯子中的水有 $d$ 升呢?如果无法做到恰好 $d$ 升,就让某个杯子里的 ...

  3. UVa 10603 Fill (BFS && 经典模拟倒水 && 隐式图)

    题意 : 有装满水的6升的杯子.空的3升杯子和1升杯子,3个杯子中都没有刻度.不使用道具情况下,是否可量出4升水呢? 你的任务是解决一般性的问题:设3个杯子的容量分别为a, b, c,最初只有第3个杯 ...

  4. 倒水问题(Fill,UVA 10603) lrj白书 p202

    看着lrj的代码自己敲了一遍,还没调试成功.... 有时间再进行完善 /* 状态start到各个状态u1,u2,u3..... 的倒水量分别为u1.dist,u2.dist,u3.dist.... * ...

  5. UVA 10603 - Fill BFS~

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&c ...

  6. UVA 10603 Fill

    题意: 题目的意思是倒水,给出的四个数据是第一个水杯,第二个水杯,第三个水杯,和目标水量.一开始只有第三个水杯是满的,剩下的水杯是空的.倒水的时候只能把倒水出来的这个杯子倒空,或是倒水进去的杯子倒满. ...

  7. UVA 10603 Fill(正确代码尽管非常搓,网上很多代码都不能AC)

    题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=1544">click here~ ...

  8. UVa 10603 Fill (暴力BFS+优先队列)

    题意:给定4个数,a,b,c,d,分别代表空杯子容积为a,b,一个盛满水的杯子容积为c,让你不断倒水,找一个dd,是不是存在某个时刻, 某个杯子里的水dd,和d相同,或者无限接近.让求最少的倒水量和d ...

  9. UVA - 10603 Fill(隐式图搜索)

    题目大意:经典的倒水问题. 给你三个瓶子,体积为a,b,c. 刚開始a.b是空的,c是满的,如今要求你到出体积为d的水.倒水的规则为,要么倒水方为空,要么接水方满 问倒到容量为d时,倒水的最小体积是多 ...

随机推荐

  1. transition使用

  2. MySQL主从复制(Replication for Backup)

    环境:MySQL5.7,VMware-Workstation-12-Pro,Windows-10,CentOS-7.5,Xshell5 1. 基本概念和操作思路 主从复制能做什么 数据库的主从复制,是 ...

  3. 搭建私有yum仓库

    需要工具: centos7 nginx rsync 新建文件夹存放镜像数据 mkdir /data mkdir /data/yum_data 同步数据 国内开源镜像站没有几个支持rsync,科技大学的 ...

  4. [Leetcode] 863. All Nodes Distance K in Binary Tree_ Medium tag: BFS, Amazon

    We are given a binary tree (with root node root), a target node, and an integer value `K`. Return a ...

  5. C#调用VP 包含素材

    VS2012 +VP9.0 ***************** 自己运行的时只要修改VP里面素材的路径即可 链接: https://pan.baidu.com/s/1J6Bc5FcBYLZLgqe30 ...

  6. 关于 WebBrowser调用百度地图API 鼠标滚轮缩放地图级别失灵的解决办法

    在桌面程序下 百度地图API的鼠标缩放地图功能可能会失灵无效! 这个原因不是API的问题 小弟试了下在WEB上面是没有问题的 于是考虑可能是WebBrowser的获取焦点问题,于是在主窗体 添加了一个 ...

  7. python 循环队列的实现

    最近在做一个东西的时候发现需要用到循环队列,实现先进先出(FIFO),不断往里面添加数据,当达到某个限定值时,最先进去的出去,然后再添加.之后需要对队列里面的内容进行一个筛选,作其他处理.首先我想到了 ...

  8. fiddler——一款莱斯的抓包工具

    进行页面和接口调试时候,好使得抓包工具还是有作用得,如postman,fiddler,相比,postman更适合用来接口调试和与其他人一起联调,而抓包监控web得时候我更喜欢用fiddler: 当然, ...

  9. Vert.x

    Vert.x是一个基于JVM.轻量级.高性能的应用平台,非常适用于最新的移动端后台.互联网.企业应用架构.Vert.x基于全异步Java服务器Netty,并扩展出了很多有用的特性. 同时支持多种编程语 ...

  10. Unity VR编辑器――如上帝般创建VR内容,Project Soli google用雷达识别手势体积相当于一张 Mini SD 内存卡

    Unity VR编辑器――如上帝般创建VR内容在GDC的一个活动中,Unity首席设计师Timoni West展示了最新的Unity VR编辑器的原型系统,让你如上帝般创建VR应用,从一片空白场景开始 ...