优先队列-UVA10603
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
typedef struct state STA;
struct state
{
int cup[],water;
bool operator< (const state p)const
{//优先队列的核心其实在于队列内元素的排列顺序,也就是自定义变量的 < 定义
return this->water > p.water;
}
}; priority_queue<STA> psd;
const int maxn = ;
int vis[maxn][maxn];//采取二维数组的原因之一是:所有状态的可能总数很少
int ans[maxn];
int maxcup[],aimd; int update_ans(STA& p)
{
for(int i=;i<;i++)
{
int t=p.cup[i];
if(ans[t]==-||ans[t]>p.water)ans[t]=p.water;
}
return ;
} int bfs()
{
while(!psd.empty())psd.pop();
memset(vis,,sizeof(vis));
memset(ans,-,sizeof(ans));
scanf("%d%d%d%d",&maxcup[],&maxcup[],&maxcup[],&aimd);
//printf("%d %d %d %d\n",maxcup[0],maxcup[1],maxcup[2],aimd);
STA p;
p.cup[]=;p.cup[]=;
p.water=;p.cup[]=maxcup[];
vis[][]=;
int d=aimd;
//
psd.push(p);
while(!psd.empty())
{
p=psd.top();psd.pop();
update_ans(p);
if(ans[d]>=)break;
//倒水
for(int i=;i<;i++)
{
for(int k=;k<;k++)
{//i与k分别是出水杯与进水杯
if(i==k)continue;
if(p.cup[i]==||p.cup[k]==maxcup[k])continue;
/*很重要的规律*/ int pour_water=min(maxcup[k],p.cup[i]+p.cup[k])-p.cup[k];
STA u;
memcpy(&u,&p,sizeof(p));
u.cup[i]-=pour_water;
u.cup[k]+=pour_water;
u.water+=pour_water;
//
if(!vis[u.cup[]][u.cup[]])
{//由于总水量一定,只要已知其中两个变量就能确定其状态
vis[u.cup[]][u.cup[]]=;
psd.push(u);
}//if
}//in for
}//out for
}//while
//
while(d>=)
{
if(ans[d]>=){printf("%d %d\n",ans[d],d);break;}
else d--;//接近d,从现实的角度而言只能比d小
}
return ;
} int main()
{
//freopen("input.txt","r",stdin);
//freopen("ans.txt","w",stdout);
int n;
scanf("%d",&n);
//printf("n is %d\n",n);
while(n--)bfs();
return ;
}
优先队列-UVA10603的更多相关文章
- 堆排序与优先队列——算法导论(7)
1. 预备知识 (1) 基本概念 如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...
- 数据结构:优先队列 基于list实现(python版)
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author: Minion-Xu #list实现优先队列 class ListPriQueueValueE ...
- python优先队列,队列和栈
打印列表的疑问 class Node: def __str__(self): return "haha" print([Node(),Node()]) print(Node()) ...
- 数据结构作业——Sanji(优先队列)
山治的婚约 Description 我们知道,山治原来是地下有名的杀人家族文斯莫克家族的三子,目前山治的弟弟已经出现,叫做四治,大哥二哥就叫汪(One)治跟突(Two)治好了(跟本剧情无关) .山治知 ...
- Java优先队列
按照Java api的说法: java.util.PriorityQueue.PriorityQueue() Creates a PriorityQueue with the default init ...
- 优先队列实现Huffman编码
首先把所有的字符加入到优先队列,然后每次弹出两个结点,用这两个结点作为左右孩子,构造一个子树,子树的跟结点的权值为左右孩子的权值的和,然后将子树插入到优先队列,重复这个步骤,直到优先队列中只有一个结点 ...
- “玲珑杯”ACM比赛 Round #7 B -- Capture(并查集+优先队列)
题意:初始时有个首都1,有n个操作 +V表示有一个新的城市连接到了V号城市 -V表示V号城市断开了连接,同时V的子城市也会断开连接 每次输出在每次操作后到首都1距离最远的城市编号,多个距离相同输出编号 ...
- Dijkstra算法优先队列实现与Bellman_Ford队列实现的理解
/* Dijkstra算法用优先队列来实现,实现了每一条边最多遍历一次. 要知道,我们从队列头部找到的都是到 已经"建好树"的最短距离以及该节点编号, 并由该节点去更新 树根 到其 ...
- 数据结构作业——ギリギリ eye(贪心+优先队列/贪心+并查集)
ギリギリ eye Description A.D.1999,由坠落地球的“谜之战舰”带来的 Over Technology,揭示了人类历史和远古文明之间的丝丝联系, 促使人类终止彼此间的战争,一方面面 ...
随机推荐
- RocketMQ重试机制和消息幂等
一.重试机制 由于MQ经常处于复杂的分布式系统中,考虑网络波动,服务宕机,程序异常因素,很有可能出现消息发送或者消费失败的问题.因此,消息的重试就是所有MQ中间件必须考虑到的一个关键点.如果没有消息重 ...
- ajax实现文本框的联想功能
先写一个jsp通过ajax传值给servlet进行查询再传给对应的div进行显示. <%@ page language="java" contentType="te ...
- github三步走(init;add . ;commit -m "提交说明")
掌握以下几点就基本能满足你平时使用了.按这个顺序来1.git安装,已经好了,略 -到这里本地代码推送到远程已经结束了 2.git本地命令操作-shift+右键-git init:初始化git环境-新建 ...
- Oracle 12C In-Memory特性研究
Oracle 12C In-Memory特性研究一.Oracle In-Memory1.1 In-Memory 开启方法1.2 开启与关闭IM column store1.3 inmemory优先级调 ...
- DOCKER绝对领域从2048到4069?不:25519,数字的飞跃,HTTP/2
这个标题花了几分钟,远远超过我构思以下内容的时间损耗,希望大家且看且珍惜,因为这是为数不多的cnblog特别标题 我记得很久以前,我开了一系列随笔,从第一篇揭发233的docker/machine开始 ...
- VFP CursorAdapter 起步二(作者:Doug Hennig 译者:fbilo)
用 CursorAdapter 来取得和更新数据 在 VFP8 中新增的 CursorAdapter 基类提供一个统一.易用的数据接口.Doug Hennig 在这个月的文章中演示了怎样使用 Curs ...
- 在C#中通过使用Newtonsoft.Json库来解析百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据
百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据,如下所示: http://api.map.baidu.com/geocoding/v3/?address=**省**市**区**路 ...
- win 8.0.12
一.下载 下载页面http://dev.mysql.com/downloads/mysql/ 选择系统平台后,点击download(根据系统选择64或32位) 二.配置 1.下载成功后,解压安装包到要 ...
- SpringBoot图文教程5—SpringBoot 中使用Aop
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...
- ELF文件之二——使用链接脚本
main.c int main() { ; } 编译:sparc-elf-gcc.exe -c main.c -o main.o 链接:sparc-elf-ld.exe main.o -nostart ...