状态搜索。类似八数码问题

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 operator < (const node &p) const //排序
    {
        return dist>p.dist;
    }
};

int ans[maxn],cup[3];  

void update_ans(node &u) //细节处理 难点
{
    for(int i=0;i<3;++i)
    {
        int d=u.fill[i];
        if(ans[d]<0||u.dist<ans[d]) ans[d]=u.dist;
    }
} 

void bfs(int a,int b,int c,int d)
{
    cup[0]=a,cup[1]=b,cup[2]=c;
    node start;
    start.fill[0]=0,start.fill[1]=0,start.fill[2]=c;
    start.dist=0;
    priority_queue<node>q;
    q.push(start);
    while(!q.empty())
    {
        node u=q.top();  q.pop();
        update_ans(u);
        if(ans[d]>=0) break;

        //尝试从第i个杯子中向第j个倒水
        for(int i=0;i<3;++i)
        for(int j=0;j<3;++j)
        {
            if(i==j) continue;
            if(u.fill[i]==0||u.fill[j]==cup[j]) continue;
            int pour=min(u.fill[i],cup[j]-u.fill[j]);
            node temp;
            memcpy(&temp,&u,sizeof(u));
            temp.dist=u.dist+pour;
            temp.fill[i]-=pour;
            temp.fill[j]+=pour;
            if(!vis[temp.fill[0]][temp.fill[1]])
            {
            q.push(temp);
            vis[temp.fill[0]][temp.fill[1]]=1;
            }
        }
    }
    while(d>=0)
    {
        if(ans[d]>=0)
        {
            printf("%d %d\n",ans[d],d);
            return ;
        }
        --d;
    }
}
int main()
{
    int T,a,b,c,d;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d%d%d",&a,&b,&c,&d);
        memset(ans,-1,sizeof(ans));
        memset(vis,0,sizeof(vis));
        bfs(a,b,c,d);
    }
    return 0;
}

如有不当之处欢迎指出!

uva10603 倒水问题的更多相关文章

  1. UVa10603 倒水 Fill-状态空间搜索

    https://vjudge.net/problem/UVA-10603 There are three jugs with a volume of a, b and c liters. (a, b, ...

  2. UVA10603 倒水问题 Fill

    伫倚危楼风细细,望极春愁,黯黯生天际.草色烟光残照里,无言谁会凭阑意. 拟把疏狂图一醉,对酒当歌,强乐还无味.衣带渐宽终不悔,为伊消得人憔悴.--柳永 题目:倒水问题 网址:https://onlin ...

  3. 关于BFS和dijkstra(2019.04.20)

    我的BFS板子 struct node{/*略*/};//表示一个状态 std::map<node,bool>vis;//判断每个状态是否已访问过 std::queue<node&g ...

  4. UVa 10603 倒水问题

    https://vjudge.net/problem/UVA-10603 题意:三个杯子,倒水问题.找出最少倒水量. 思路:路径寻找问题.不难,暴力枚举. #include<iostream&g ...

  5. 广度优先搜索 cdoevs 1226 倒水问题

    cdoevs 1226 倒水问题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升 ...

  6. 倒水问题 (codevs 1226) 题解

    [问题描述] 有两个无刻度标志的水壶,分别可装x升和y升 ( x,y 为整数且均不大于100)的水.设另有一水缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒.已知x升壶为空壶, ...

  7. UVa10603 Fill

    解题思路:这是神奇的一题,一定要好好体会.见代码: #include<cstdio> #include<cstring> #include<algorithm> # ...

  8. 【UVA10603】Fill (构图+最短路)

    题目: Sample Input22 3 4 296 97 199 62Sample Output2 29859 62 题意: 有三个杯子它们的容量分别是a,b,c, 并且初始状态下第一个和第二个是空 ...

  9. POJ 3414 Pots【bfs模拟倒水问题】

    链接: http://poj.org/problem?id=3414 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22009#probl ...

随机推荐

  1. 阿里java开发手册中命名规约解读之DO/BO/DTO/VO/AO

    前言 在阅读<阿里巴巴Java开发手册>时,看到命名规则中有这样一条 虽然知道这些是根据Java对象的角色所分配名称的后缀,但是没有弄清楚分别是什么意思,日常开发中也没有使用到. 网上查找 ...

  2. js执行函数报错Cannot set property 'value' of null怎么解决?

    js执行函数报错Cannot set property 'value' of null 的解决方案: 原因:dom还没有完全加载 第一步:所以js建议放在body下面执行, 第二步:window.on ...

  3. input标签(待填坑)

    input标签几种属性值 button:用作定义按钮 checkbox:定义复选框 file:供文件上传 hidden:定义隐藏的输入字段 image:图像形式的提交按钮 password:密码字段 ...

  4. Sql Server的艺术(三) SQL聚合函数的应用

    SQL提供的聚合函数有求和,最大值,最小值,平均值,计数函数等. 聚合函数及其功能: 函数名称 函数功能 SUM() 返回选取结果集中所有值的总和 MAX() 返回选取结果集中所有值的最大值 MIN( ...

  5. 将excel文件内容存储到数据库,并可以实时在前端查看(不必生成文件)

    版权声明:本文为博主原创文章,未经博主允许不得转载 本文主要讲前端内容,后端涉及较少,可以认为是使用Java. 首先是excel文件上传,这个较为简单,可以html5的数据接口FormData()进行 ...

  6. R语言-探索多个变量

    目的: 通过探索文件pseudo_facebook.tsv数据来学会多个变量的分析流程 通过探索diamonds数据集来探索多个变量 通过酸奶数据集探索多变量数据 知识点: 散点图 dplyr汇总数据 ...

  7. Java基础教程1:环境配置及第一个HelloWorld.java

    本文主要介绍JDK环境配置.Sublime Text3配置及第一个HelloWorld.Java程序.运行环境为Win10系统,使用JDK1.8版本. 1. JDK下载及环境配置 1.1 JDK下载 ...

  8. 主备(keepalived+haproxy)

    系统:centos6.9 mini 主机名    ip                                虚拟ip kh1     192.168.126.210 kh2     192. ...

  9. 夏令营提高班上午上机测试 Day 4 解题报告

    我要是没记错的话,今天的题难度算挺适中的. *标程来自高天宇哥哥 T1:小G的字符串 题目描述 有一天,小 L 给小 G 出了这样一道题:生成一个长度为 n 的.全由小写英文字母构成的字符串,只能使用 ...

  10. demo说明

    访问http://192.168.90.63:30111/face_mark/, 会看到上图的界面. 下面简单说下如何使用这个demo. 一.选择选择同一个人不同角度的五张图. 选中了五张图片.此时任 ...