洛谷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 列的矩形 ,如下图所示,其中每个格 ...
随机推荐
- SQlServer中的MD5加密
SELECT sys.fn_varbintohexstr(HASHBYTES('MD5', '我'));
- 【Codeforces 1031C】Cram Time
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 如果找到最大的n使得1+2+...+n<=a+b 然后第一天输出1,2.3,4....t1 这里1+2+..+t1<=a 这还远远 ...
- Xcode8、 iOS10 适配问题
调用相机.相册.麦克风.位置等隐私问题崩溃解决办法 你的项目中访问了隐私数据,比如:相机,相册,联系人等,在Xcode8中打开编译的话,统统会crash,控制台会输出下面这样的日志: 这是因为iOS对 ...
- STM32F407 串口通信:分类&常见接口 个人笔记
串行通信的分类 常见串行通信接口 STM32 UART STM32串口异步通信需要定义的参数: ① 起始位 ② 数据位(8位或者9位) ③ 奇偶校验位(如果有的话是第9位) ④ 停止位(1,15,2位 ...
- 《ajax学习》之ajax+JavaScript事件验证用户名是否可注册
当用户注册时,服务器数据库需要对用户输入的用户信息(以用户名为例子)进行验证,在不刷新页面的情况下又需要页面和服务器进行数据请求,最好的方法是用ajax异步请求. 一.实现思路: 1.用户输入信息 2 ...
- conflunce安装配置
下载 下载Confluence-v5.4.4.zip包,其中包含 atlassian-confluence-5.4.4-x64.bin #程序二进制文件 confluence5.x-crack.z ...
- MYSQL Sorting result 把队列堆满了,该怎么办?
show processlist;发现有200多个队列,select cardnum from table where xxxid = 31 order by abc_time desc 这样的一个排 ...
- hihoCoder#1042 跑马圈地
原题地址 经网友jokeren提醒,后面给出的代码虽然可以AC原题,但存在bug,主要是在矩形覆盖情况的判断上处理的不够完全. 看似挺复杂的,但是仔细分析一下可以化简: 首先,不用枚举周长,因为更长的 ...
- 在 Windows 10 64 下安装 Memcached,安装 PHP 7.0.22 的 Memcache 扩展
1.之前写过一篇在 PHP 5.6.27 下的博客:http://www.shuijingwanwq.com/2017/09/11/1892/ ,此次是 PHP 7.0.22 下的,如图1 图1 2. ...
- Java导出jar并运行
1. 创建manifest.mf文件 在工程下创建manifest.mf文件.文件内容为: Manifest-version: 1.0 Main-Class: SqlCheckUtil.java 注意 ...