洛谷P1514 引水入城——dfs
题目:https://www.luogu.org/problemnew/show/P1514
搜索+DP;
自己想出来的方法第一次80分好高兴!
再改了改就A了,狂喜乱舞;
也就是 dfs,仔细一想第一行的每个点能覆盖到最后一行的点一定是连续的一段,否则没人能覆盖中间间断的点;
所以最上面每个点跑一遍 dfs,记下能覆盖区间的 l 和 r,再小小DP一下即可。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const maxn=;
int n,m,h[maxn][maxn],f[maxn],cnt,tot,l,r,dx[]={,,-,},dy[]={,,,-};
bool vis[maxn][maxn],vs[maxn];
struct N{int l,r,len;}a[maxn],b[maxn];
bool cmp(N x,N y){return x.l<y.l;}
void dfs(int x,int y)
{
vis[x][y]=;
if(x==n)vs[y]=;
for(int i=;i<;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(xx<||yy<||xx>n||yy>m||vis[xx][yy]||h[xx][yy]>=h[x][y])continue;
if(xx==n)l=min(l,yy),r=max(r,yy);
dfs(xx,yy);
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++) scanf("%d",&h[i][j]);
for(int i=;i<=m;i++)
{
if(h[][i-]>h[][i]||h[][i+]>h[][i])continue;
// l=n+1; r=0;
l=i; r=i;//!!!
memset(vis,,sizeof vis);
dfs(,i);
a[++cnt].l=l; a[cnt].r=r; a[cnt].len=r-l+;
// printf("(1,%d) l=%d r=%d\n",i,l,r);
}
int ans=;
for(int i=;i<=m;i++)
if(!vs[i])ans++;
if(ans) {printf("0\n%d",ans); return ;}
sort(a+,a+cnt+,cmp);
for(int i=;i<=cnt;i++)
{
while(a[i].r<=a[i-].r&&i<=cnt)i++;
b[++tot].l=a[i].l; b[tot].r=a[i].r;
}
memset(f,0x3f,sizeof f);
f[]=;
for(int i=;i<=tot;i++)
for(int j=b[i].l-;j<b[i].r;j++)
f[b[i].r]=min(f[b[i].r],f[j]+);
printf("%d\n%d",,f[m]);
return ;
}
洛谷P1514 引水入城——dfs的更多相关文章
- 洛谷P1514 引水入城
洛谷P1514 引水入城 原题链接 一道好题...细节真多 第一次提交90分,然后就GG了,不知从何改起 其实比较简单吧... 首先,一个点的水流向最后一排,一定可以形成一个区间. 不行的话肯定GG ...
- 洛谷 P1514 引水入城 解题报告
P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 NN 行 \times M×M 列的矩形,如上图所示,其中每个格 ...
- CODEVS 1066/洛谷 P1514引水入城
1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在一个遥远的国 ...
- 洛谷P1514 引水入城 [搜索,区间DP]
题目传送门 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 N 行×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每 ...
- [NOIP2010] 提高组 洛谷P1514 引水入城
题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. ...
- 洛谷 P1514 引水入城
这次不说闲话了,直接怼题 这道题用bfs其实并不难想,但比较困难的是怎么解决满足要求时输出蓄水厂的数量.其实就像其他题解说的那样,我们可以用bfs将它转化成一个区间覆盖问题,然后再进行贪心. 首先枚举 ...
- 洛谷P1514引水入城
题目 搜索加贪心其实并不需要用到\(DP\),搜索也是比较简单地搜索. 对于每个第一行的城市进行类似于滑雪那道题的搜索,然后记录最后一行它所覆盖的区间,易得一个一行城市只会有一个区间.然后可以在最后进 ...
- P1514 引水入城 DFS
题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个NN 行\times M×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市 ...
- [luogu]P1514 引水入城[搜索][记忆化][DP]
[luogu]P1514 引水入城 引水入城 题目描述在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形 ,如下图所示,其中每个格 ...
随机推荐
- jQuery的ready与js的load事件的区别
摘自:http://www.cnblogs.com/see7di/archive/2011/07/15/2239677.html 为了理解这两个事件的异同,读者应该先了解HTML文档加载的顺序. DO ...
- 3.2.8 sed 的运作
sed 的工作方式相当直接.命令行上的每个文件会依次打开与读取.如果没有文件,则使用标准输入,文件名“-”(单个破折号)可用于表示标准输入. [many@avention Desk ...
- Windows 下安装 Node.js
搭建博客系列的 Node.js 环境安装.Windows 下面安装可以通过图形化界面进行安装,非常方面. 1.打开 Node.js 官网,下载对应版本的安装包(msi 后缀的) 2.双击运行下载的程序 ...
- 【XML】-- C#读取XML中元素和属性的值
Xml是扩展标记语言的简写,是一种开发的文本格式. 啰嗦几句儿:老师布置的一个小作业却让我的脑细胞死了一堆,难的不是代码,是n多嵌套的if.foreach,做完这个,我使劲儿想:我一女孩,没有更多女孩 ...
- Lucene_Hello(示例)
(1)创建project (2)导入Lucene的核心包 (3)编写代码建立索引 /lucene01/src/cn/hk/lucene/TestIndex.java: package cn.hk.lu ...
- STM32F407 IO引脚复用器和映射 个人笔记
基本概念 stm32有一些内置外设,每个外设有一个复用功能AF(Alternate functions). stm32的每个io引脚东路有一个16路复用器,该复用器一端连该引脚,另外16端连AF0~A ...
- get方法和set方法
定义一个类,该类有一个私有成员变量,通过构造方法将其进行赋初值,并提供该成员的getXXX()和setXXX()方法 提示:假设有private String name;则有 public void ...
- oracle基于归档的增量异地恢复 --异地新增数据文件问题
1 rac异地基于归档文件的增量恢复 2 遇到在主库新增数据文件 后 日志恢复出现路径问题 . 错误如下 : creating datafile fno=20 name=+DATA/dataf ...
- POJ1094 / ZOJ1060
#include <cstdio> #include <cstring> #include <stack> #include <iostream> us ...
- Qmake 工具编译调试
Qmake 工具编译调试 2015年4月9日星期四 18:38:06 1. 确定qmaek 路径 [root@roger ~]# which qmake /usr/lib/qt-3.3/bin/qma ...