洛谷 1514 引水入城(记忆化搜索+DP)

用STM32H7的FMC+AD7606搭建多通道数据采集系统:两种工作模式(查询与FIFO中断)的代码详解与性能对比 本文详细解析了基于STM32H7微控制器和AD7606 ADC芯片的多通道数据采集系统设计,重点对比了查询模式与FIFO中断模式的实现方法与性能差异。通过FMC总线实现高速并行数据采集,系统支持16bit同步采样,最高可达200Ksps/通道。文章提供了完整的代码实现和优化策略,帮助工程师在工业监测等实时性要求高的场景中构建可靠的数据采集方案。 阅读详情

*PS:做的时候还以为纯搜索,后来发现竟然有DP??exm?调了好长时间,从此dp一生黑(假的)QwQ。

go to the problem

题目描述

在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。
这里写图片描述
为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输水站。蓄水厂的功能是利用水泵将湖泊中的水抽取到所在城市的蓄水池中。

因此,只有与湖泊毗邻的第1 行的城市可以建造蓄水厂。而输水站的功能则是通过输水管线利用高度落差,将湖水从高处向低处输送。故一座城市能建造输水站的前提,是存在比它海拔更高且拥有公共边的相邻城市,已经建有水利设施。由于第N 行的城市靠近沙漠,是该国的干旱区,所以要求其中的每座城市都建有水利设施。那么,这个要求能否满足呢?如果能,请计算最少建造几个蓄水厂;如果不能,求干旱区中不可能建有水利设施的城市数目。

输入输出格式

输入格式:
输入文件的每行中两个数之间用一个空格隔开。输入的第一行是两个正整数N 和M,表示矩形的规模。接下来N 行,每行M 个正整数,依次代表每座城市的海拔高度。

输出格式:
输出有两行。如果能满足要求,输出的第一行是整数1,第二行是一个整数,代表最少建造几个蓄水厂;如果不能满足要求,输出的第一行是整数0,第二行是一个整数,代表有几座干旱区中的城市不可能建有水利设施。

输入输出样例

输入样例#1:
【输入样例1】
2 5
9 1 5 4 3
8 7 6 1 2

【输入样例2】
3 6
8 4 5 6 4 4
7 3 4 3 3 3
3 2 2 1 1 2
输出样例#1:
【输出样例1】
1
1

【输出样例2】
1
3

说明

【样例1 说明】

只需要在海拔为9 的那座城市中建造蓄水厂,即可满足要求。

【样例2 说明】
这里写图片描述
上图中,在3 个粗线框出的城市中建造蓄水厂,可以满足要求。以这3 个蓄水厂为源头

在干旱区中建造的输水站分别用3 种颜色标出。当然,建造方法可能不唯一。

【数据范围】
这里写图片描述

因为水总是从高处向低处流,所以想到可以用搜索。
第一问很简单,只需要一遍Bfs或Dfs就能解决。不能的情况也很简单,只需要计算一下不能走到的有多少城市就行了。关键就是能的情况下如何计算最少建造几个蓄水厂。
解决这个问题需要首先统计在第一行的每个城市修建一个蓄水厂在最后一行的城市水利设施所能遍及的范围。
因为第一行的城市最多有500个,城市总数最多有250000个,对每个城市都bfs一遍会超时,所以考虑记忆化搜索,对于每个城市处理他所能便利的区间,然后把区间合并,第一问可以在搜索中处理。
求最少建造的蓄水厂数需要用dp做。
(这个dp卡了我这个蒟蒻好长时间QAQ)
设dp[i][j]为处理到第i个蓄水厂时覆盖前j座城市所需要建造的最少的蓄水厂数,可知

dp[i][j]=min(dp[i-1][j],dp[i-1][Point[1][i].l-1]+1);

发现第一维可以省略掉,转移方程为

dp[j]=min(dp[j],dp[Point[1][i].l-1]+1);
代码(o°ω°o)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;

int N,M,cnt;
int h[510][510],dp[510];
int x[4]={0,1,0,-1},
    y[4]={1,0,-1,0};
struct maple{
    int l,r,used;
}Point[510][510];

void dfs(int X,int Y)
{
    Point[X][Y].used=1;
    if(X==N)  ++cnt,Point[X][Y]=(maple){Y,Y,1};
    for(int i=0;i<=3;++i)
    {
        int xx=X+x[i],yy=Y+y[i];
        if(xx>0&&xx<=N&&yy>0&&yy<=M&&h[xx][yy]<h[X][Y])
        {
            if(Point[xx][yy].used)
            {
                Point[X][Y].r=max(Point[X][Y].r,Point[xx][yy].r);
                if(Point[xx][yy].l&&Point[X][Y].l) Point[X][Y].l=min(Point[X][Y].l,Point[xx][yy].l);
                else if(!Point[X][Y].l) Point[X][Y].l=Point[xx][yy].l;
            } 
            else
            {
               dfs(xx,yy);
               Point[X][Y].r=max(Point[X][Y].r,Point[xx][yy].r);
               if(Point[X][Y].l&&Point[xx][yy].l) Point[X][Y].l=min(Point[X][Y].l,Point[xx][yy].l);
               else if(!Point[X][Y].l) Point[X][Y].l=Point[xx][yy].l;
            }
        }
    }
}
int main()
{
    scanf("%d%d",&N,&M);
    for(int i=1;i<=N;++i)
       for(int j=1;j<=M;++j)
          scanf("%d",&h[i][j]);
    for(int i=1;i<=M;++i)
       if(!Point[1][i].used)
          dfs(1,i);
    if(cnt!=M) 
    {
        printf("0\n%d",M-cnt);
        return 0;
    }
    memset(dp,63,sizeof(dp));
    dp[0]=0;
    for(int i=1;i<=M;++i)
       for(int j=Point[1][i].l;j<=Point[1][i].r;++j)
          dp[j]=min(dp[j],dp[Point[1][i].l-1]+1);
    printf("1\n%d",dp[M]);
    return 0;
}
基于Python的军事装备数据爬取与分析:从网页抓取到数据可视化实战 本文将详细介绍如何使用Python最新技术栈构建一个完整的军事装备数据爬虫系统。我们将从爬虫基础讲起,逐步深入到异步爬取、反反爬策略、数据存储与分析等高级主题,最终实现一个能够自动抓取、清洗、存储和分析军事装备数据的完整解决方案。文章包含大量实战代码示例,涉及requests-html、aiohttp、Playwright等现代爬虫库,以及MongoDB存储、Pandas分析和Pyecharts可视化等技术。关键词:Python爬虫、军事数据、异步爬取、反反爬、数据可视化。 阅读详情

相关推荐

ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】

ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】 在CFX计算时经常会遇到内存不足的错误报告,有的算例网格并不多也会出现这样的问题,本文就最近遇到的内存错误问题以及解决方法进行简单的总结,以供大家参考。 1 CFX-Solver Manager内存种类 打开Define Run,面板上的Partitioner、Solver、Interpolator选项中分别都有关于内存的设置选项。当出现内存不足错误时,应该设置哪一个选项的内存参数,要看是哪一部分的内存不足。 2 C

深海民工CFDer 3万+

洛谷 P1372 又是毕业季I 1~n中求k个数的最大公约数

P1372 又是毕业季I 代码如下: #include<iostream> #include<algorithm> #include<stdio.h> #include<cmath> #include<queue> #include<cstring> #include<vector> #include<sta...

化身孤岛的鲸o的博客 861

SD--根据订单创建出库单(相关的函数列表的介绍系列篇(2))

创建订单样例代码参见:http://blog.youkuaiyun.com/CompassButton/archive/2007/05/09/1601712.aspx 可以根据一个订单或者部分订单项来创建出库单,代码如下:* Populating the item data lx_sales_item-ref_doc = l_vbeln. lx_sales_item-ref_item = c_000010

SAP BLOG--Jack Wu 6226

洛谷P1514-引水入城(dfs+贪心区间覆盖)

传送门 首先通过佬的博客可以得到一个结论:当最后有解时,每个蓄水厂在最后一行能够覆盖到的区间一定是连续的,由此可以将其转化为区间覆盖问题进行贪心。 考虑用 pairpairpair 存储对于第一行的第 iii 个点,其在最后一行能覆盖到的区间的左端点和右端点。由于最后需要贪心选择最小的区间以覆盖整个 [1,m][1,m][1,m] 范围,因此在每次的 dfsdfsdfs 之前都要把 visvisvis 数组进行清空,防止第 iii 点的左端点答案受第 i−1i-1i−1 点的右端点答案影响。而考虑到 vi

国家一级划水运动员的博客 512

基于Mask-RCNN网络的书架图书书脊分割和检测(含代码)

图书馆的书架上的图书书脊分割/检测对于图书书名等信息的识别具有重要意义,因此,该博客基于Mask-RCNN网络实现了图书书脊的分割和检测,有利于进一步利用ocr文字识别技术实现图书书名等信息的入库。如下图所示,为书架原始数据和分割/检测后的结果。(本文已训练模型,无需训练)

qq_44619530的博客 2025

基于STM32L4XX 、HAL库的SGM452B数字温度传感器驱动应用C语言程序设计

SGM452B_RESOLUTION_12BIT = SGM452B_CONFIG_R1 | SGM452B_CONFIG_R0 /* 12位分辨率,精度0.0625°C,转换时间200ms */SGM452B_RESOLUTION_11BIT = SGM452B_CONFIG_R1, /* 11位分辨率,精度0.125°C,转换时间100ms */SGM452B_RESOLUTION_10BIT = SGM452B_CONFIG_R0, /* 10位分辨率,精度0.25°C,转换时间50ms */

PP_Cottage的博客 327

记忆化搜索(洛谷P1028 P1464)

记录每一次搜索对象的返回值,以后递归搜索中若再次出现该对象,则可直接引用之前存储的值,不必再次对该对象进行递归求值。2.i以x/2作为初始值进入循环,s+=f(i)立即再次调用递归函数,以此类推,直到调用到1,在 逐步退出来。1.for循环中s+=f(i),每一个f(i)的值都是i这个数能产生的子集数。在该递归结束前(及return的上一步),使用数组记录下要return的变量。3.a[x]在从1开始逐步退出来之前,记录该次的答案。(1)洛谷P1028:数的计算。

2301_81608637的博客 469

《Python入门到精通》函数详解

函数就是一段「封装」起来的「代码」,目的是提高代码的「模块性」和「复用性」。 2、函数的参数 2.1、变量的就近原则 2.2、传递参数 2.3、形参和实参 2.4、位置参数 2.5、缺省参数 2.6、可变类型和不可变类型 2.7、关键字参数 3、匿名函数 4、函数的返回值

wangyuxiang946的博客 1万+

洛谷 P1544 三倍经验 【记忆化搜索】

现在你在金字塔的顶部(第一行),你希望走到金字塔的底部(第 n 行),每一步你只能走向当前所在位置的左下方的数字或者右下方的数字。同时作为一个强大的小朋友,你可以选择金字塔中的不多于 k 个数字让他们成为原来的 3 倍。

m0_71209625的博客 2086

ESP32-CAM 赋能 AI 视觉巡检小车:自主避障与目标追踪实现全解析

本文基于 ESP32-CAM 实现了低成本 AI 视觉巡检小车的核心功能,硬件成本<100 元,兼顾自主避障与目标追踪。算法升级:移植 YOLOv5nano 量化模型(INT8),提升目标检测精度(如识别巡检场景中的 “异常物体”“人员”);无线拓展:通过 MQTT 协议将巡检图像、距离数据上传到阿里云 / 腾讯云,实现远程监控;多传感器融合:增加温湿度(DHT11)、红外测温(MLX90614)模块,扩展巡检维度;路径规划:结合 SLAM 算法,实现自主建图与路径巡检。

weixin_42300449的博客 368

破盾实录|Vueling航空阿卡迈防护逆向:从503挑战到Cookie生成的全流程拆解

摘要:文章分享了作者在爬取西班牙伏林航空(Vueling)机票数据时,遭遇阿卡迈(Akamai)防护系统的实战经历。起初简单的请求被拦截返回503错误,分析发现阿卡迈通过混淆JS代码实施"挑战-验证"机制,需模拟真实浏览器环境才能获取有效Cookie。作者详细拆解了逆向过程:从抓包分析JS挑战流程,到破解代码混淆和控制流平坦化,最终用Python+Pyppeteer成功模拟浏览器特征,突破防护获取数据。整个过程涉及JS反混淆、环境检测绕过和Cookie生成验证等关键技术点,为类似防护系统

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1642

洛谷:尼克的任务【记忆化搜索】【记忆化搜索的使用条件】

个人对记忆化搜索有以下感悟【不保证一定正确,但保证有参考价值】 我们将搜索的过程看成在一个有向无环图上遍历的过程【也必然是这个过程】; 首先,记忆化搜索之所以能让时间复杂度为指数级别的搜索过程降到线性,是因为他进行了剪枝操作,即当遍历到某一个点A时,这个点的值已经计算过了,我们可以将之前得到的值存储起来,当再次遍历到A点时,我们就不用重复计算了,如此一来,每条边我们只需要遍历一遍,所以时间复杂度是线性的; 本菜鸟知道,这个东西大家都明白,但以下的推断本菜鸟觉得很有意义; 在推断之前,得先声明几个基础

weixin_62953519的博客 1093

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[luogu]P1514 引水入城[搜索][记忆化][DP]

[luogu]P1514 引水入城 引水入城 题目描述在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形 ,如下图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。 为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输水站。蓄水厂的功 能是利用水泵将湖...

diezhen8177的博客 177

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

一些记忆化搜索

洛谷P1514 引水入城 题目链接 题面较长,这里不放截图了 题目分析: 比较典型的记忆化搜索题,如果不记忆化的话将有大量重复计算严重影响效率。这个用dp也比较复杂,因为这里涉及到一些路径可能往回走。这里每次保存起始点能够走到最底层的左端点和右端点(这里可以证明如果下面一排全能走到那么每个起始点所覆盖的区间一定是连续的,想一想,为什么?)用一个be数组来判断该点是否已经经过,若已经经过就直接返回以...

Boil的博客 211

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

引水入城 洛谷P1514题解(记忆化dfs+dp)

引水入城题解 日常膜拜dalao:财神万岁!!!!!!!!!!!!!!!!!! 洛谷P1514(noip2010) 原题链接https://www.luogu.org/problem/P1514 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个N行 ×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。 ...

Revenger666的博客 384

洛谷 P1514 引水入城 记忆化搜索+贪心

https://www.luogu.org/problem/P1514 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个NNN 行×M \times M×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。 为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输...

xiji333的博客 258

【洛谷P1514】引水入城【dfs】【区间dp】

题目大意: 题目链接:https://www.luogu.org/problem/P1514 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个NNN行×M\times M×M列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。 为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄...

stoorz 337

洛谷-1514 引水入城

题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个N 行 N×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。 为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输水站。蓄水厂的功能是利用水泵将湖泊中的水抽取到所在城市的蓄水池中。 因此,只有与湖泊毗邻...

mkopvec的博客 364

洛谷P1514 引水入城【记忆化搜索+线段覆盖】

题目链接:https://www.luogu.org/problemnew/show/P1514 题目大意:n*m个城市,要求在最后一行的干旱区所有城市中建设水利设施。水利设施有两种,一种为蓄水厂,一种为输水站。第一行城市由于沿海,可以建设蓄水厂。某城市建输水站的要求是相邻(上下左右)且高度比自己高的城市建有水利设施(利用高度差输水)。如果可以全部建成,则输出最少要建几个蓄水厂。否则输出干旱区中不...

Gina_h的博客 504

洛谷 P1514 引水入城 ( 记忆化搜索+贪心) 题解

题目来源: https://www.luogu.org/problemnew/show/P1514 题目描述: 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个NN 行\times M×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。 为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市...

摇摇乐的博客 1089

洛谷 引水入城(记忆化dfs,区间全覆盖问题(用贪心解决))

题目链接: [NOIP2010 提高组] 引水入城 - 洛谷 思路: 一种朴素的想法是对第一行的点全部跑一遍dfs,计算出能到达的第n行的点,然后全部加起来看能否覆盖第n行所有点,完成第一问。然后第二问如何计算最少建造的蓄水池数?枚举显然不行,dp的话......我也不知道咋递推。 所以这道题需要先证明出一个特别重要的结论:如果能完成全覆盖,所有蓄水池覆盖区间一定是一个连续线段!证明见某大佬博客:题解 P1514 【引水入城】 - 天上一颗蛋 的博客 - 洛谷博客​​​​​​ 这样的话就简..

bunny_1024的博客 375

引水入城_洛谷1514_搜索 + dp

题目描述在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。 为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输水站。蓄水厂的功能是利用水泵将湖泊中的水抽取到所在城市的蓄水池中。因此,只有与湖泊毗邻的第1 行的

olahiuj的博客 410

洛谷1514 引水入城

{好遗憾啊,这个题只能过五个点,三个WA,两个TLE,不知道为什么……望大神赐教} 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输水站。蓄水厂的...

weixin_34007906的博客 326

NOIP2010 引水入城

https://www.luogu.org/problem/show?pid=1514 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。 为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输水...

weixin_30558305的博客 57

简单stl和搜索题单

做题记录简单stlsetstring 简单stl set 了解set 4个集合间的操作 #define ALL(x) x.begin(),x.end() #define INS(x) inserter(x,x.begin()) void test(){ set x1,x2; //do something ... set_union(ALL(x1), ALL(x2), INS(x));//并集操作 set_intersection(ALL(x1), ALL(x2), INS(x));//交集操作 s

m0_51531927的博客 1365
上一篇: codevs 2924 数独挑战(dfs)
下一篇: <学习笔记>排序模板
Loi_Mapleleaf
博客等级 码龄10年 17粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值