noip2010引水入城-搜索+贪心
题目描述
在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。
为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输水站。蓄水厂的功能是利用水泵将湖泊中的水抽取到所在城市的蓄水池中。
因此,只有与湖泊毗邻的第1 行的城市可以建造蓄水厂。而输水站的功能则是通过输水管线利用高度落差,将湖水从高处向低处输送。故一座城市能建造输水站的前提,是存在比它海拔更高且拥有公共边的相邻城市,已经建有水利设施。由于第N 行的城市靠近沙漠,是该国的干旱区,所以要求其中的每座城市都建有水利设施。那么,这个要求能否满足呢?如果能,请计算最少建造几个蓄水厂;如果不能,求干旱区中不可能建有水利设施的城市数目。
输入输出格式
输入格式:
输入文件的每行中两个数之间用一个空格隔开。输入的第一行是两个正整数N 和M,表示矩形的规模。接下来N 行,每行M 个正整数,依次代表每座城市的海拔高度。
输出格式:
输出有两行。如果能满足要求,输出的第一行是整数1,第二行是一个整数,代表最少建造几个蓄水厂;如果不能满足要求,输出的第一行是整数0,第二行是一个整数,代表有几座干旱区中的城市不可能建有水利设施。
输入输出样例
【输入样例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【输出样例2】 1 3
看了几个题解,搜索判断是否能覆盖所有干旱区域,贪心+动态规划找出最少需要几个抽水站。犯了一个很严重的审题错误,误把所有的城市视作干旱区域。想了一个很low的贪心,将第一行从高到低开始深搜建立抽水站,到全覆盖需要几个抽水站,贪了40分。
炒了个题解http://blog.csdn.net/loi__dijiang/article/details/49000357,发现他只能得90分。又通过看题解发现搜索一次的通病就是第六个点不过,于是又修改了先搜索一次,回答第一问,再搜索一次,回答第二问。可能是因为这个点正好是个找不到的店,提前rentun了,题目中如果城市的连通度大,时间复杂度到500*500*500,就超时拉。
参考代码:
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;
struct factory{int l,r;
}p[501];int n,m,map[501][501],f[501],cnt=0,cun=0;
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};bool vis[501][501]={0},ans[501]={0};/*
bool comp(const factory &a,const factory &b)
{return a.l<b.l;
}
*/
void dfs(int x,int y,int ori)
{ if(x==m&&vis[m][y]==0) cun++;vis[x][y]=1;if(cun==n)return;if(x==m){ans[y]=1;p[ori].l=min(p[ori].l,y);p[ori].r=max(p[ori].r,y);}for(int i=0;i<4;i++){int dx=x+dir[i][0],dy=y+dir[i][1];if(dx<1||dx>m||dy<1||dy>n)continue;if(map[dx][dy]<map[x][y]&&!vis[dx][dy])dfs(dx,dy,ori);}}int main()
{cin>>m>>n;for(int i=1;i<=n;++i)p[i].l=f[i]=300000;f[0]=0;for(int i=1;i<=m;++i)for(int j=1;j<=n;++j)cin>>map[i][j];for(int i=1;i<=n;++i){if(vis[1][i]==0)dfs(1,i,i);//memset(vis,0,sizeof(vis));}if(cun<n){if(cnt)cout<<0<<endl<<n-cun;return 0;}for(int i=1;i<=n;++i){memset(vis,0,sizeof(vis));cun=0;dfs(1,i,i);} for(int i=1;i<=n;++i)for(int j=1;j<=n;++j){if(i>=p[j].l&&i<=p[j].r)f[i]=min(f[i],f[p[j].l-1]+1);}
cout<<1<<endl<<f[n];
return 0;}
noip2010引水入城-搜索+贪心相关推荐
- luogu1514 [NOIp2010]引水入城 (bfs+记忆化搜索)
我们先bfs一下看看是否能到最底下的所有点 如果不能的话,直接把不能到的那几个数一数就行了 如果能的话: 可以发现(并不可以)某格能到达的最底下的格子一定是一个连续的区间 (因为如果不连续的话,我们先 ...
- 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 ...
- Codevs 1066 引水入城 2010年NOIP全国联赛提高组
1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 在一个遥远的国度 ...
- codevs 1066 引水入城(DFS+DP)
codevs 1066 引水入城 题目描述 Description 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政 区划十分特殊,刚好构成一个N行M列的矩形,如上图所示, ...
- NOIP 2010 引水入城
P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 NN 行 \times M×M 列的矩形,如上图所示,其中每个格 ...
- CCF201703-5 引水入城(100分题解链接)
试题编号: 201703-5 试题名称: 引水入城 时间限制: 2.0s 内存限制: 512.0MB 问题描述: 问题描述 MF城建立在一片高原上.由于城市唯一的水源是位于河谷地带的湖中,人们在坡地上 ...
- 【NOIP2010】引水入城
Description 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海 ...
- P1514 引水入城
题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. ...
- 引水入城(dfs的做法)洛谷p1514
在这道题中, 由于每个点所能到达的地方是一定的,并且若底层能够填满,那么到达底层的位置一定 所以我们可以把每个点所到达的最底层记录下来,若访问到某一之前到达过的点,直接用这个点所到达的底层的点更新即可 ...
最新文章
- 关于WinForm的博客推荐
- OSPF详解-2 区域结构
- Zxing二维码的集成使用
- 活用这23种图表,让你的数据分析胜人一筹 | 推荐收藏
- 图文列表+富文本解析+折线图示例小程序模板
- 《剑指 Offer I》刷题笔记 41 ~ 50 题
- apache 网站转nginx_堡塔网站加速宝塔面板网站加速安装设置使用教程
- View的事件分发机制
- 医院科室管理系统(IDEA开发)
- 23年哪些企业不能申报高企
- WCF---关于无法使用以下搜索标准找到 X.509 证书的问题
- 关于git的commit提交回退的三种命令模式
- pythonpost请求修改编码格式_Python请求编码POST d
- python中类的首字母一定得大写吗_Python学习
- Python下载小说遮天
- 洗衣机水位传感器原理:检测水位频率
- android 11.0app应用卸载白名单
- docker-compose links depend on 使用的两种方式
- 【Unity3D】Unity 游戏画面帧更新 ( 游戏物体 GameObject 移动 | 借助 Time.deltaTime 进行匀速运动 )
- 你有22款高逼格免费字体请下载!
热门文章
- Oracle那些年那些事儿
- (文献随笔)关于乳腺癌脑转移文献合集(一)
- 服务器修改盘的盘序,黑群辉改sata控制器识别接口数、硬盘盘序的经验总结
- 网易相册找回服务器,再见了,网易相册!24日起关闭服务器,不保留数据
- 网络推广方式有哪些,网络推广哪个平台好?
- php5.5.18 32位 php apache2_4.dll,WinXP环境下安装Apache2.2.3 php5.2.0 Mysql5.0.18 phpMyAd
- Launcher3如何实现主菜单背景的透明度调整
- 五点三次平滑法滤波 C 和 matlab代码
- 大连外国语大学linux主机名,大连外国语大学
- 在html中加入pdf文件吗,如何在网页中显示PDF文件