The Wedding Juicer
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的更多相关文章
- BZOJ1736 [Usaco2005 jan]The Wedding Juicer 婚宴的榨汁机
从外面一点一点往里面拓展(floodfill),每次找出最小的一个点,计算它对答案的贡献就好了... 找最小的点的话,直接pq就行 /********************************* ...
- POJ 2227 The Wedding Juicer (优先级队列+bfs+dfs)
思路描述来自:http://hi.baidu.com/perfectcai_/item/701f2efa460cedcb0dd1c820也可以参考黑书P89的积水. 题意:Farmer John有一个 ...
- USACO 2005 January Gold The Wedding Juicer
题目 题目链接,我只在poj上找到了题目,usaco居然上不去. 大意就是说有一些\(1\times 1\times 1\)的小方块堆在一起,问最多能装多少水. 我们在一次测试中出了这题,由于我写水题 ...
- 杭电ACM分类
杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...
- bzoj usaco 金组水题题解(2.5)
bzoj 2197: [Usaco2011 Mar]Tree Decoration 树形dp..f[i]表示处理完以i为根的子树的最小时间. 因为一个点上可以挂无数个,所以在点i上挂东西的单位花费就是 ...
- BZOJ-USACO被虐记
bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...
- POJ2227(优先队列)
The Wedding Juicer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3440 Accepted: 155 ...
- 转载:hdu 题目分类 (侵删)
转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...
- bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)
听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...
随机推荐
- Open XML Format SDK引用
Excel的便捷使得其在非开发人员的办公中非常流行,而Excel确实也提供了很多有用的功能.很多时候我们还需要以Excel为数据源来进行处理或者将Excel作为模板来生成一些报表.在Open XML ...
- [React] Intro to inline styles in React components
React lets you use "inline styles" to style your components; inline styles in React are ju ...
- 1/8=1/a+1/b,a,b为自然数
#include "stdio.h" int main(){ int a; int b; for(a=1;a<1000;a++) { for(b=1;b<1000; ...
- [转]Android NDK几点回调方式
一.NDK中获取android设备ID的方式 Java代码如下(获取设备ANDROID_ID): final String androidId = Secure.getString(context.g ...
- Java基础知识强化之集合框架笔记19:List集合迭代器使用之 并发修改异常的产生原因 以及 解决方案
1. 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现. ConcurrentModi ...
- svn 树冲突
情况类似如下:(其中 removed_directory 是你工作的某个目录) 代码如下 复制代码 $svn statusD C removed_directory> local ...
- IE兼容问题
1.IE下event事件没有target属性,只有srcElement属性,解决方法:使用srcObj = event.srcElement ? event.srcElement : event.ta ...
- MVC打包压缩JS&CSS文件调试时过滤了一些文件
BundleTable.这个确实是比较好用,打包并压缩了CSS,使之加载时减少流量. 但是在调试的时候会疑问为何有很多JS,CSS文件无法打包,其实是因为调试时VS自动过滤了如下文件: 后台跟踪了 ...
- Html5 部分特性
HTML5 是 W3C 与 WHATWG 合作的结果. 编者注:W3C 指 World Wide Web Consortium,万维网联盟. 编者注:WHATWG 指 Web Hypertext Ap ...
- Zend Server安装后首次运行就出现Internal Server Error的解决
无论是使用哪个版本的Zend Server来搭建PHP服务器,首次运行都会出现Internal Server Error的错误,对很多新手而言,每当看到这种错误时,那一刻内心绝对都是崩溃的.然而,这个 ...