花神倒果汁

花神倒果汁
(juice.pas/c/cpp)
【题目描述】
为了庆祝花神开花,花神决定举办一个宴会。其中有一个游戏叫倒果汁。
果汁容器的底座是一个独立的N×M的矩阵,矩阵的每个格点有一个高度,表示这个格子正上方有多少个1×1×1的方块。相邻两个方块被粘得严实,不会漏。
现在花神给你一盒果汁,问你在不使果汁满出来的情况下,容器最多能装下多少立方单位的果汁。
【输入格式】
第一行两个整数N和M。
接下来M行,每行N个整数,表示这个格子的高度H[i][j]。
【输出格式】
仅一行,表示答案。
【样例输入】
4 5
5 8 7 7
5 2 1 5
7 1 7 1
8 9 6 9
9 8 9 9

【样例输出】
12

【样例解释】
矩阵变成了:
5 8 7 7
5 5 5 5
7 5 7 1
8 9 7 9
9 8 9 9
3+4+4+1=12
【数据规模】
对于100%的数据:1≤M,N≤300;H[i][j]≤10^9;

这题就是著名的“短板效应”——一个木桶里的水最多能装多少取决于其最短的一条版高度是多少。那么,我们自然可以把外面四周边界看作木桶的“板”。我们要想在里面装水,我们自然要知道这最短的一根版。但因为题目中说“相邻两个方块被粘得严实,不会漏”,那么最角落的4个点是根本不需要的,直接打上vis[i][j]=true就是了。除此之外,边界上的点也要打上true,并且要找个最低的板。那么需要多次找最低的板,我们自然想到了用堆来刷。最低的板找到了,在呢?例如下图:
-------------
|   |   |    |   |
-------------
|   |   |    |/ \|
-------------
|   |   |<-|Ls|
-------------
|   |   |    |\ /|
-------------
|   |   |    |   |
-------------
假设Ls是最低的板,那么他可以向4个方向扩展(这里只有3个)。那么,我们每扩展到一个格子xx,yy,如果他是合法且没有被更新过,那么才能去更新它,因为每个点最多只会被更新1次(因为我们每次都是寻找这些板的最矮的地方,从这个当前最矮的地方扩展到xx,yy。由于我们只是考虑板,而暂时不考虑木桶的内部,所以导致里面的点也就是后入堆的点影响不到外面的点也就是先入堆的点,那么我们从堆里面get出来的x,y这个点是当前木桶的最短一块木板(所以木桶是有可能变成不规则的),当他更新了点xx,yy以后,接下去的任何一点去更新xx,yy都不是最优的,所以我们只会让每个点入堆一次,也就是说他只会被更新一次,并且它也只能更新其他格子一次)。那么,每当这个格子合法且未更新过,那么要把他打上vis=true,而且要更新new[xx][yy]——
1.if old[xx][yy]<new[x][y] then begin inc(ans,new[x][y]-old[xx][yy]); new[xx][yy]
:=new[x][y];
2.else new[xx][yy]:=old[xx][yy];
对于情况1,就是说如果xx,yy的木板高度<x,y已经更新过(可能有水)的总高度,那么此时,xx,yy是可以达到new[x][y]的高度的,于是ans+=改变的值;
对于情况2,就是说如果xx,yy的木板高度>=x,y已经更新过(可能有水)的总高度,那么此时,xx,yy是无论如何不能倒水下去的,所以new的高度等于old的高度的。
那么,更新过后,我们还要将它put入堆去更新其他的格子。
那么最后知道len=0也就是所有点都更新过了的时候就break掉,输出就好了。

 1 const fl:array[0..3,0..1] of longint=((-1,0),(0,1),(1,0),(0,-1)); 
 2       maxn=305*305;
 3 var map,dis:array[0..305,0..305] of longint;
 4     vis:array[0..305,0..305] of boolean;
 5     heap:array[0..maxn] of record
 6                              x,y,h:longint;
 7                            end;
 8     n,m,ans,len:longint;
 9 procedure init;
10 var i,j:longint;
11 begin
12   readln(m,n);
13   for i:=1 to n do
14     for j:=1 to m do read(map[i][j]);
15 end;
16 procedure put(x,y,h:longint);
17 var son:longint;
18 begin
19   inc(len); heap[len].h:=h; heap[len].x:=x; heap[len].y:=y; son:=len;
20   while son>1 do
21   begin
22     if heap[son>>1].h>heap[son].h then begin
23                                          heap[maxn]:=heap[son]; 
24                                          heap[son]:=heap[son>>1];
25                                          heap[son>>1]:=heap[maxn];
26                                        end
27                                   else break;
28     son:=son>>1;
29   end;
30 end;
31 procedure get;
32 var fa,son:longint;
33 begin
34   heap[1]:=heap[len]; dec(len); fa:=1;
35   while fa<<1<=len do
36   begin
37     if (heap[fa<<1].h<heap[fa<<1+1].h) or (fa<<1+1>len) then son:=fa<<1
38                                                         else son:=fa<<1+1;
39     if heap[fa].h>heap[son].h then begin
40                                      heap[maxn]:=heap[son];
41                                      heap[son]:=heap[fa];
42                                      heap[fa]:=heap[maxn];
43                                    end
44                               else break;
45     fa:=son;
46   end;
47 end;
48 procedure main;
49 var i,x,y,xx,yy:longint;
50 begin
51   for i:=2 to m-1 do begin dis[1][i]:=map[1][i]; put(1,i,map[1][i]); vis[1][i]:=true; end;
52   for i:=2 to m-1 do begin dis[n][i]:=map[n][i]; put(n,i,map[n][i]); vis[n][i]:=true; end;
53   for i:=2 to n-1 do begin dis[i][1]:=map[i][1]; put(i,1,map[i][1]); vis[i][1]:=true; end;
54   for i:=2 to n-1 do begin dis[i][m]:=map[i][m]; put(i,m,map[i][m]); vis[i][m]:=true; end;
55   vis[1][1]:=true; vis[1][m]:=true; vis[n][1]:=true; vis[n][m]:=true;
56   while len>0 do
57   begin
58     x:=heap[1].x; y:=heap[1].y; get;
59     for i:=0 to 3 do
60     begin
61       xx:=x+fl[i][0]; yy:=y+fl[i][1];
62       if (xx<1) or (xx>n) or (yy<1) or (yy>m) then continue;
63       if vis[xx][yy] then continue;
64       vis[xx][yy]:=true;
65       if dis[x][y]>map[xx][yy] then begin inc(ans,dis[x][y]-map[xx][yy]); dis[xx][yy]:=dis[x][y]; end
66                            else dis[xx][yy]:=map[xx][yy];
67       put(xx,yy,map[xx][yy]);
68     end;
69   end;
70 end;
71 procedure print;
72 begin
73   writeln(ans);
74 end;
75 begin
76   init;
77   main;
78   print;
79 end.
View Code

 

转载于:https://www.cnblogs.com/whc200305/p/7112655.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21186.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos7.9部署sd-webui,容易上手易学就会

一、什么是sd-webui 最近两年AI技术非常火爆&#xff0c;特别是今年随着ChatGPT被吹爆&#xff0c;更多的AI技术映入大家眼帘。相较于其他AI&#xff0c;感觉AI绘画更接地气&#xff0c;sd webui全名&#xff1a;Stable Diffusion web ui是AI绘画中的一种算法&#xff0c;是一…

已损坏,无法打开。 您应该将它移到废纸篓。解决方案

1.首先确认下隐私与安全性是否选择了任何来源 如果没有任何来源选项可参考 https://wangjian.blog.csdn.net/article/details/130246875?spm1001.2014.3001.5502 2.如果还是不行,就用终极大招,给文件安全性权限.打开终端,先输入如下指令 sudo xattr -r -d com.apple.quaran…

Pycharm使用(配置)技巧

下载Pycharm后&#xff0c;需要将界面配置的人性化一点&#xff0c;下面介绍一下本人觉得方便的配置方法和使用技巧。 配置方法&#xff1a; 版本汉化&#xff1a; Chinese   打开File,找到Settings   打开Settings中的Pulgins&#xff0c;选择Marketplace,搜索chinese&a…

GPT Prompt(提示词)写法与教程,相关站点与工具

文章目录 1、Prompt工程师&#xff08;提示工程师&#xff09;2、提示词教程3、提示词工具&#xff08;中文&#xff09;4、提示词工具&#xff08;英文&#xff09; 1、Prompt工程师&#xff08;提示工程师&#xff09; Prompt工程师&#xff0c;也称为AI提示工程师&#xff…

chatgpt赋能python:Python汉化包:让你的编程更加优美

Python汉化包&#xff1a;让你的编程更加优美 作为一名有10年python编程经验的工程师&#xff0c;我深知Python在编程领域的重要性。但是&#xff0c;对于刚开始学习Python的新手来说&#xff0c;可能会受到英文显示的影响&#xff0c;导致学习或开发难度增加。这个时候&#…

chatgpt赋能python:如何取消Python的汉化

如何取消Python的汉化 Python是一种被广泛使用的高级编程语言&#xff0c;其简单易学、灵活性强和开源等特点让许多开发者和企业选择它作为主要开发工具。但是&#xff0c;对于某些用户来说&#xff0c;Python自带的中文化界面可能并不符合他们的需求&#xff0c;因此取消Pyth…

cursor中文设置----输出中文

来源&#xff1a;微信公众号「编程学习基地」 文章目录 软件中文设置中文问题输出设置 软件中文设置 方法&#xff1a; 点击文件->首选项->扩展: 搜索zh-CN :安装chinese(simplified) 简体中文语言包 3&#xff09;安装完成重启Cursor就会用中文回答问题了 中文问题…

小米组织架构变动历史

2018年 9月3日&#xff0c;新设集团参谋部和组织部&#xff0c;改组电视部、生态链部、MIUI 部和互娱部等四个业务部&#xff0c;重组成十个新的业务部。参谋部&#xff0c;高层管理干部的聘用、升迁、培训和考核激励等&#xff0c;以及各个部门的组织建设和编制审批&#xff…

互联网 + :小米案例版

目录 上&#xff1a;感知正在生成的未来 中&#xff1a;做适者生存的“达尔文雀” “互联网”价值观 “互联网”流程 “互联网”资源 下&#xff1a;进化的未来&#xff1a;两种路线并行 路线一&#xff1a;以“互联网”实现跨界&#xff0c;大举建设生态系 路线二&#xff1a;…

电商项目:高仿小米商城(一)

前言 时间过得很快&#xff0c;统一哥转眼也大三了。欢娱不惜、时光易逝。不由得引起人的感叹 那时候我只是个Java入门小白&#xff0c;lambda表达式都jio得难得一匹&#xff0c;但我心中的不甘是清晰的。了解我的人都知道&#xff0c;我向来是个不会向现实低头的人。技术水…

中国信通院推出了一个“APP签名服务系统,可防篡改、可追溯、第三方认证“的初步了解

中国信通院推出了一个“APP签名服务系统,可防篡改、可追溯、第三方认证"的初步了解 今天查看邮箱无意间看到一封小米应用商店的发的邮箱&#xff0c;内容如下: 点击上图中的链接进入官网 国家工信部竟然搞一个 App签名服务系统 , 这个有点和谷歌应用商店的应用自签名功能…

最新ECShop小米商城模板堂商业源码+手机版/整站数据/团购

正文: 完整演示图放到压缩包里了&#xff0c;因为是属于整站长图&#xff0c;文章里面不好放&#xff0c;程序有安装说明&#xff0c;有兴趣的自己去看吧。 价值6000的小米商城模板&#xff0c;ECShop内核&#xff0c;带团购、手机版和微信商城的哦&#xff0c;源码站长亲测&…

黑马点评项目-短信登录功能

一、导入黑马点评项目 1、代码下载 视频资源链接&#xff1a;P25 实战篇-02.短信登录-导入黑马点评项目 代码可以直接去黑马微信公众号上搜索&#xff0c;或者从下面的网盘链接中下载&#xff1a;链接: https://pan.baidu.com/s/1aWhWVn2Ai7AeuDm0KftSqw 提取码: snuw 2、数…

2023最新匿名短信【时光送信】H5源码V4.0版+后端管理

如果把这个做成副业那将大大增加你每天的收益像这种看似简单&#xff0c;非常冷漠小众的项目&#xff0c;往往可以带给你超高收益&#xff0c;而且每条短信成本1毛都不到 里面就包含这三个功能&#xff0c;看似不起眼对学生或者正在谈恋爱的人很有用 发出去的短信就是这种&…

Smartbi观点 | ChatGPT还处于初级阶段?然而AI早已打入BI内部

最近&#xff0c;当我们还沉浸在电影《流浪地球2》MOSS所带来的震感时&#xff0c;ChatGPT又火爆社交媒体&#xff0c;成为全球“新顶流”。 官方数据显示&#xff0c;今年1月&#xff0c;平均每天约有1300万独立访客使用 ChatGPT&#xff0c;累计用户超1亿&#xff0c;创下了…

录用2360篇、接收率25.78%,CVPR 2023接收结果公布

关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 计算机视觉研究院专栏 作者&#xff1a;Edison_G 你中了吗&#xff1f; 转自《机器之心》 接收率出来了&#xff01;在短短几个小时内&#xff0c;各…

ChatGPT的阴谋~第1125位投票者的时间轴

2023年3月29日&#xff0c;媒体都在转发马斯克的公开信&#xff0c;大意是暂停一切大型AI研发至少6个月&#xff0c;并在此期间制定相应方案管控AI。虽然公开信只有595个单词&#xff0c;却被世界众多顶级教授&#xff0c;科技界联合创始人一致认同。 10日后&#xff0c;OpenA…

文心一言 VS chatgpt (17)-- 算法导论4.1 3~4题

三、在你的计算机上实现最大子数组问题的暴力算法和递归算法。请指出多大的问题规模n0是性能交叉点一一从此之后递归算法将击败暴力算法?然后&#xff0c;修改递归算法的基本情况一一当问题规模小于 n0 时采用暴力算法。修改后&#xff0c;性能交叉点会改变吗? 文心一言&…

文心一言 VS chatgpt (2)-- 算法导论1.2

一.给出在应用层需要算法内容的应用的一个例子&#xff0c;并讨论涉及的算法的功能。 文心一言&#xff1a; 在应用层需要算法内容的应用的一个例子是无人机自主飞行控制。无人机自主飞行控制需要算法来确定无人机的位置、速度和方向&#xff0c;以便在复杂的环境中实现精确的…

chatgpt赋能Python-pythonzero

Pythonzero&#xff1a;让您以零门槛学习Python的最佳平台 什么是Pythonzero Pythonzero是一种基于Python编程语言的在线教育平台&#xff0c;旨在向初学者以及那些想要进一步提高的人提供学习Python的指导。通过Pythonzero&#xff0c;您将能够快速上手编写Python代码&#…