【搜索+DP】codevs1066-引水入城
【题目大意】
一个N行M列的矩形,如上图所示,其中每个格子都代表一座城 市,每座城市都有一个海拔高度。现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输水站。蓄水厂的功能是利用水泵将湖泊中的水抽取到所在城市的 蓄水池中。因此,只有与湖泊毗邻的第1行的城市可以建造蓄水厂。而输水站的功能则是通 过输水管线利用高度落差,将湖水从高处向低处输送。故一座城市能建造输水站的前提,是存在比它海拔更高且拥有公共边的相邻城市,已经建有水利设施。 由于第N行的城市靠近沙漠,是该国的干旱区,所以要求其中的每座城市都建有水利设施。那么,这个要求能否满足呢?如果能,请计算最少建造几个蓄水厂;如果不能,求干旱区中不可能建有水利设施的城市数目。
【思路】
从湖泊边的每一个城市跑DFS,得到能抵达沙漠边的哪些城市。在沙漠旁所有城市都可以被访问到的情况下,可以证明由湖泊旁的一个城市到达的沙漠旁城市是连续的。
证明:如果不连续那么一定有另一个点b可以到达本点a不能到达的地方,那么两个点的路径一定会有一个交点,a就一定可以通过这个交点到达所谓不能到达的地方,所以假设不成立。
问题转化为了给出一些线段,求用最少的线段数覆盖一个区间。DP一下就好了。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int MAXN=500+50; 7 struct node 8 { 9 int l,r; 10 bool operator < (const node&x) const 11 { 12 return l<x.l; 13 } 14 }arriv[MAXN]; 15 int m,n,h[MAXN][MAXN],vis[MAXN][MAXN]; 16 int f[MAXN],cover[MAXN]; 17 int dx[4]={1,-1,0,0}; 18 int dy[4]={0,0,1,-1}; 19 20 void init() 21 { 22 scanf("%d%d",&m,&n); 23 for (int i=1;i<=m;i++) 24 for (int j=1;j<=n;j++) scanf("%d",&h[i][j]); 25 } 26 27 void dfs(int x,int y,int fr) 28 { 29 vis[x][y]=fr; 30 if (x==m) 31 { 32 arriv[fr].l=min(arriv[fr].l,y); 33 arriv[fr].r=max(arriv[fr].r,y); 34 cover[y]=1; 35 } 36 for (int i=0;i<4;i++) 37 { 38 int xx=x+dx[i],yy=y+dy[i]; 39 if (xx<=0 || xx>m || yy<=0 || yy>n) continue; 40 if (h[xx][yy]<h[x][y] && vis[xx][yy]!=fr) dfs(xx,yy,fr); 41 } 42 } 43 44 void solve() 45 { 46 memset(cover,0,sizeof(cover)); 47 memset(vis,0,sizeof(vis)); 48 for (int i=1;i<=n;i++) 49 { 50 arriv[i].l=MAXN,arriv[i].r=-1; 51 dfs(1,i,i); 52 } 53 54 int flag=1,rem=0; 55 for (int i=1;i<=n;i++) if (!cover[i]){flag=0;rem++;} 56 57 if (flag) 58 { 59 puts("1"); 60 sort(arriv+1,arriv+n+1); 61 for (int i=1;i<=n;i++) f[i]=MAXN; 62 f[0]=0; 63 for (int i=1;i<=n;i++) 64 { 65 int l=arriv[i].l,r=arriv[i].r; 66 for (int j=l-1;j<=r;j++) f[r]=min(f[r],f[j]+1); 67 } 68 printf("%d",f[n]); 69 } 70 else printf("0\n%d",rem); 71 } 72 73 int main() 74 { 75 init(); 76 solve(); 77 return 0; 78 }
转载于:https://www.cnblogs.com/iiyiyi/p/6060258.html
【搜索+DP】codevs1066-引水入城相关推荐
- codevs 1066 引水入城(DFS+DP)
codevs 1066 引水入城 题目描述 Description 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政 区划十分特殊,刚好构成一个N行M列的矩形,如上图所示, ...
- Codevs 1066 引水入城 2010年NOIP全国联赛提高组
1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 在一个遥远的国度 ...
- Codevs 1066 引水入城 2010年NOIP全国联赛提高组 BFS + 贪心
Codevs 1066 引水入城 题目上没有给出样例二,只给出了样例二的图,真是奇怪(丧心病狂). Input2: 3 6 8 4 5 6 4 4 7 3 4 3 3 3 3 2 2 1 1 2 Ou ...
- NOIP 2010 引水入城
P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 NN 行 \times M×M 列的矩形,如上图所示,其中每个格 ...
- CCF201703-5 引水入城(100分题解链接)
试题编号: 201703-5 试题名称: 引水入城 时间限制: 2.0s 内存限制: 512.0MB 问题描述: 问题描述 MF城建立在一片高原上.由于城市唯一的水源是位于河谷地带的湖中,人们在坡地上 ...
- luogu1514 [NOIp2010]引水入城 (bfs+记忆化搜索)
我们先bfs一下看看是否能到最底下的所有点 如果不能的话,直接把不能到的那几个数一数就行了 如果能的话: 可以发现(并不可以)某格能到达的最底下的格子一定是一个连续的区间 (因为如果不连续的话,我们先 ...
- noip2010引水入城-搜索+贪心
题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. ...
- P1514 引水入城
题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. ...
- 【NOIP2010】引水入城
Description 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海 ...
- 引水入城(dfs的做法)洛谷p1514
在这道题中, 由于每个点所能到达的地方是一定的,并且若底层能够填满,那么到达底层的位置一定 所以我们可以把每个点所到达的最底层记录下来,若访问到某一之前到达过的点,直接用这个点所到达的底层的点更新即可 ...
最新文章
- Nagios+mutt+msmtp 无法发送邮件的问题!
- python制作音乐模块_用Python打造一个只属于你的专属音乐播放器,享受动手的快乐!...
- 0.11内核rd_load@ramdisk.c中memcpy函数好像有bug
- 009_JSONFunction对象
- python工厂模式 取代__init___浅析Python 简单工厂模式和工厂方法模式的优缺点
- PHP二开美化版站长技术导航网站源码
- Python为视频设置遮罩实现异形窗口播放
- Linux文件系统Ext2,Ext3,Ext4性能大比拼
- vue插件开发练习--实用弹窗
- AI快捷键大全 2020
- Hinton、LeCun、Bengio等人获得2022 年阿斯图里亚斯公主技术和科学研究奖!
- QNAP 警告: NAS 设备正遭受暴力攻击
- 简易网页(HTML)
- 网络地址转换——NAT
- Python | Python保存高维数组array,Python用pandas将numpy保存csv文件,Python保存3维数组
- 程序或算法的时间复杂度
- Navicat Premium 12 for Mac 破解
- 智能电视是否是一台计算机,误区四 智能电视代替电脑使用_平板电视_液晶电视评测-中关村在线...
- date类、calendar类与dateformat类
- 进入网页页面的开发者模式——三种方式
热门文章
- java微信公众号中文乱码,java微信公众平台获取用户信息中文乱码解决办法(第十五课)...
- linux clk模型
- NEERC 2014, Eastern subregional contest(汇总)
- SAP.PA认证培训视频教程(58集)
- java合法标识符_JAVA合法标识符
- 赏红叶,是金秋心旷神怡之事
- 使用vue.js + jQuery开发组件
- 如何快速有效的学习 Python ?阿里高级开发工程师给出建议
- facebook surround360 环境配置,编译,测试(生成双目立体全景图)
- 如何打造运营商级的超高清强互动直播业务?