UVA10603 倒水问题 Fill】的更多相关文章

伫倚危楼风细细,望极春愁,黯黯生天际.草色烟光残照里,无言谁会凭阑意. 拟把疏狂图一醉,对酒当歌,强乐还无味.衣带渐宽终不悔,为伊消得人憔悴.--柳永 题目:倒水问题 网址:https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=18&page=show_problem&problem=1544 There are three jugs with a volume of a, b…
状态搜索.类似八数码问题 AC代码 #include<cstdio> #include<queue> #include<cstring> #include<algorithm> using namespace std; const int maxn=200+5; int vis[maxn][maxn];//是否访问过该节点 struct node { int fill[3]; //当前状态的水的分布 int dist; //当前状态倒水量 bool oper…
https://vjudge.net/problem/UVA-10603 There are three jugs with a volume of a, b and c liters. (a, b, and c are positive integers not greater than 200). The first and the second jug are initially empty, while the third is completely filled with water.…
我的BFS板子 struct node{/*略*/};//表示一个状态 std::map<node,bool>vis;//判断每个状态是否已访问过 std::queue<node>q;//BFS扩展队列 //BFS主代码 q.push(start_node); //初始节点入队 vis[start_node] = 1; while (!q.empty()) { node head = q.front(); //去队首元素进行拓展 q.pop(); for (int i : dire…
解题思路:这是神奇的一题,一定要好好体会.见代码: #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; ; ]; struct node{ ], cnt; friend bool operator <(node A, node B){ return A.cnt > B.cnt; //cnt更小的优先级更高 } };…
题目: Sample Input22 3 4 296 97 199 62Sample Output2 29859 62 题意: 有三个杯子它们的容量分别是a,b,c, 并且初始状态下第一个和第二个是空的, 第三个杯子是满水的.可以把一个杯子的水倒入另一个杯子,当然,当被倒的杯子满了或者倒的杯子水完了,就不能继续倒了. 你的任务是写一个程序计算出用最少的倒水量,使得其中一个杯子里有d升水.如果不能倒出d升水的话,那么找到一个d' < d ,使得d' 最接近d. 分析: 可以把每个状态即3个水杯里的…
[题目描述] 有三个没有刻度的水壶,容量分别为a,b和c(单位为升,都是<=200的正整数).初始时前两个水壶是空的,而第三个装满了水.每次可以从一个水壶往一个水壶里倒水,直到一个水壶倒空或者另一个水壶倒满.为了让某个水壶恰好有d升水,至少要倒多少升的水?如果无解,找一个小于且最接近d的d’代替d. [输入输出] 输入 第一行一个整数 t ,代表有 t 组测试数据,接下来 t 行每行包括 a, b, c, d 四个整数,分别代表三个水壶的容量 a, b, c 和目标水量 d . 输出 输出共 t…
题意 : 有装满水的6升的杯子.空的3升杯子和1升杯子,3个杯子中都没有刻度.不使用道具情况下,是否可量出4升水呢? 你的任务是解决一般性的问题:设3个杯子的容量分别为a, b, c,最初只有第3个杯子装满了c升水,其他两个杯子为空.最少需要倒多少升水才能让某一个杯子中的水有d升呢?如果无法做到恰好d升,就让某一个杯子里的水是d'升,其中d'<d并且尽量接近d.(1≤a,b,c,d≤200).要求输出最少的倒水量和目标水量(d或者d'). 分析 : 紫书P202. #include<bits/…
看着lrj的代码自己敲了一遍,还没调试成功.... 有时间再进行完善 /* 状态start到各个状态u1,u2,u3..... 的倒水量分别为u1.dist,u2.dist,u3.dist.... */ /* 按倒水量递增的顺序去寻找当前状态的v[0],v[1],v[2]是否为d 但是程序实现的时候我们寻找目标水量是根据 ans[d]>0,而不是对每一个状态的v[]进行遍历 为什么这样做呢?当然是因为麻烦,ans[d]>0很直接地说明了v[]有三者之一为d */ #include <cs…
题目大意:有三个已知体积但不知刻度的杯子,前两个杯子中初始时没有水,第三个装满水,问是否可以倒出d升水,如果倒不出,则倒出一个最大的d’,使得d’<=d,并且在这个过程中要求总倒水量最少. 题目分析:广搜,以前两个杯子中的水量作为标记状态.只不过这次不是要求的最求最少步数,而是要求最少倒水量. 代码如下: # include<iostream> # include<cstdio> # include<queue> # include<cstring>…