poj2227:http://poj.org/problem?id=2227

题意:给你一块矩形区域,这个矩形区域是由一个个方格拼起来的,并且每个方格有一个高度。现在给这个方格灌水,问最多能装多少水。例如
555
525
555
这个区域,只有中间的一个方格能装水,因为只有中间的高度比周围都低,所以能装3单位的水。
题解:一开始自己也不不知道怎么做,看了黑书p89的介绍才知道怎么做。是这样的,从边界周围的最低处入手,DFS,如果周围的方格比这个高度高,则把这个方格加入最小堆中,如果比这个小,则继续DFS。同时要注意边界的处理。这样一来,每次DFS,都能确定新的边界,并且每次都是从已知边界的最小处进行DFS。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
int used[][];
int g[][];
long long sum,counts,counts2;
int n,m;
struct Node{
int x;
int y;
int h;
bool operator<(const Node b)const{
return h>b.h;
}
};
priority_queue<Node>Q;
void DFS(int x,int y,int h){
if(x+<n&&!used[x+][y]){
used[x+][y]=;
if(g[x+][y]>=h){
Node tt;
tt.x=x+;tt.y=y;tt.h=g[x+][y];
Q.push(tt);
}
else {
counts+=g[x+][y];
counts2++;
DFS(x+,y,h);
}
}
if(x->&&!used[x-][y]){
used[x-][y]=;
if(g[x-][y]>=h){
Node tt;
tt.x=x-;tt.y=y;tt.h=g[x-][y];
Q.push(tt);
}
else {
counts+=g[x-][y];
counts2++;
DFS(x-,y,h);
}
}
if(y+<m&&!used[x][y+]){
used[x][y+]=;
if(g[x][y+]>=h){
Node tt;
tt.x=x;tt.y=y+;tt.h=g[x][y+];
Q.push(tt);
}
else {
counts+=g[x][y+];
counts2++;
DFS(x,y+,h);
}
}
if(y->&&!used[x][y-]){
used[x][y-]=;
if(g[x][y-]>=h){
Node tt;
tt.x=x;tt.y=y-;tt.h=g[x][y-];
Q.push(tt);
}
else {
counts+=g[x][y-];
counts2++;
DFS(x,y-,h);
}
}
}
int main(){
while(~scanf("%d%d",&m,&n)){
memset(used,,sizeof(used));
sum=;
while(!Q.empty())Q.pop();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
scanf("%d",&g[i][j]);
if(i==||i==n||j==||j==m){
Node tt;
tt.x=i;tt.y=j;tt.h=g[i][j];
Q.push(tt);
}
}
while(!Q.empty()){
Node ttt=Q.top();
Q.pop();
int xxx=ttt.x;
int yyy=ttt.y;
int hhh=ttt.h;
counts=;counts2=;
used[xxx][yyy]=;
DFS(xxx,yyy,hhh);
sum+=counts2*hhh-counts;
}
printf("%I64d\n",sum);
}
}

The Wedding Juicer的更多相关文章

  1. BZOJ1736 [Usaco2005 jan]The Wedding Juicer 婚宴的榨汁机

    从外面一点一点往里面拓展(floodfill),每次找出最小的一个点,计算它对答案的贡献就好了... 找最小的点的话,直接pq就行 /********************************* ...

  2. POJ 2227 The Wedding Juicer (优先级队列+bfs+dfs)

    思路描述来自:http://hi.baidu.com/perfectcai_/item/701f2efa460cedcb0dd1c820也可以参考黑书P89的积水. 题意:Farmer John有一个 ...

  3. USACO 2005 January Gold The Wedding Juicer

    题目 题目链接,我只在poj上找到了题目,usaco居然上不去. 大意就是说有一些\(1\times 1\times 1\)的小方块堆在一起,问最多能装多少水. 我们在一次测试中出了这题,由于我写水题 ...

  4. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  5. bzoj usaco 金组水题题解(2.5)

    bzoj 2197: [Usaco2011 Mar]Tree Decoration 树形dp..f[i]表示处理完以i为根的子树的最小时间. 因为一个点上可以挂无数个,所以在点i上挂东西的单位花费就是 ...

  6. BZOJ-USACO被虐记

    bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...

  7. POJ2227(优先队列)

    The Wedding Juicer Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3440   Accepted: 155 ...

  8. 转载:hdu 题目分类 (侵删)

    转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...

  9. bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)

    听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...

随机推荐

  1. [置顶] JQuery插件学习教程

    这是JQuery其它常用插件的视频教程,包括validate插件,.comet插件等.同时有大量实例项目,如果你是喜欢JQuery的童鞋千万不要错过. 教程的内容有: 1_validate插件(1) ...

  2. hadoop编程技巧(4)---总体情况key按类别搜索TotalOrderPartitioner

    Hadoop代码测试版:Hadoop2.4 原理:携带MR该程序随机抽样提取前的输入数据,样本分类,然后,MR该过程的中间Partition此值用于当样品排序分组数据.这使得可以实现全球排名的目的. ...

  3. [转] 用管道获得shell 命令的输出

    用管道: 通过fgets(buf, n, ptr)buf就可以得到命令“ps -ef"一样的信息, 读帮助”man popen": char *cmd = "ps -ef ...

  4. STL的基本使用之关联容器:map和multiMap的基本使用

    STL的基本使用之关联容器:map和multiMap的基本使用 简介 map 和 multimap 内部也都是使用红黑树来实现,他们存储的是键值对,并且会自动将元素的key进行排序.两者不同在于map ...

  5. 用WebStorm调试本地html(含嵌入的javascript).

    题外话: 以前很少能调试,甚至以为不能调试(好笨),后来我看了一本叫做<<Learning Three.js>>的一本书后,里面推荐有几种javascript的编辑工具,都蛮好 ...

  6. ID选择器

    在很多方面,ID选择器都类似于类选择符,但也有一些重要的区别: 1.为标签设置id="ID名称",而不是class="类名称". 2.ID选择符的前面是井号(# ...

  7. Debug your C# project more efficiently

    I am a very beginner working with C# and Visual Studio 2013. When I debug my project, I always reope ...

  8. MYSQL命令行连接数据库

    连接数据库 mysql -uroot -proot -P3306 -Dmydemo # 参数详解 -uuser 用户user -ppwd 密码 -P3306 端口 -Dmysql 数据库 #显示所有数 ...

  9. Vijos1675 NOI2005 聪聪和可可 记忆化搜索

    简单题,结果因为理解错题意懵逼了好久…… moveTo[x][y]表示聪聪在节点x,可可在节点y时,聪聪下一步应到达哪一个节点 dp[x][y]表示聪聪在节点x,可可在节点y,且轮到可可行动时,所需时 ...

  10. java编码转化方案-备用

    import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class changeCharSet { /** 7位AS ...