贪心+DFS:引水入城
。。。我觉得这道题放在贪心里应该不为过
原文:https://blog.csdn.net/qq_41513352/article/details/80726030
题目测评请点击——》https://www.acwing.com/problem/content/499/


。。。图片自行放大。。。
题解:最开始的思路是全排列+搜索,预估30分。正解是搜索+DP,先对每个
靠近河岸的点搜一次,保存下来这个点能够覆盖的区间,也就是能到达
的靠近沙漠的点,然后对于这些区间进行DP,找出覆盖所有区间用的
最少的点。另外用一个数组保存所有蓄水站能够覆盖到的点,来找到不能覆盖完的情况。
搜索部分是常规的DFS,DP部分定义d(i),表示覆盖到i点的一个状态,遍历j来寻找最优的重叠情况。
代码:
#include<bits/stdc++.h>
#define MAXA 700
using namespace std;
bool vis[MAXA][MAXA];
int n,m,cnt,OK[MAXA],Map[MAXA][MAXA],d[MAXA],Left[MAXA],Right[MAXA];
int drct[5][3]={{1,0},{-1,0},{0,1},{0,-1}};
void DFS(int x,int y,int origin) {
if(x==n) {
OK[y]=1;
Left[origin]=min(Left[origin],y);
Right[origin]=max(Right[origin],y);
}
for(int i=0;i<=3;i++) {
int tx=x+drct[i][0];
int ty=y+drct[i][1];
if(!vis[tx][ty]&&Map[tx][ty]<Map[x][y]&&tx>=1&&tx<=n&&ty>=1&&ty<=m){
vis[tx][ty]=1;
DFS(tx,ty,origin);
}
}
}
int main() {
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&Map[i][j]);
for(int i=0;i<=MAXA;i++)
Left[i]=d[i]=0x3f3f3f3f;
for(int i=1;i<=m;i++) {
if(Map[1][i-1]<=Map[1][i]&&Map[1][i]>=Map[1][i+1])
DFS(1,i,i);
memset(vis,0,sizeof(vis));
}
for(int i=1;i<=m;i++)
if(!OK[i])
cnt++;
if(cnt) {
printf("0\n");
printf("%d",cnt);
return 0;
}
d[0]=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++) {
if(Left[j]<=i&&i<=Right[j])
d[i]=min(d[i],d[Left[j]-1]+1);
}
printf("1\n");
printf("%d",d[m]);
}
贪心+DFS:引水入城的更多相关文章
- vijos p1777 引水入城(bfs+贪心)
引水入城 描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,其中每个格子都代表一座城市,每座城市都有一个海拔高度. 为了使 ...
- luoguP1514 引水入城 题解(NOIP2010)(Bfs+贪心)
P1514 引水入城 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include<c ...
- 引水入城 2010年NOIP全国联赛提高组(bfs+贪心)
1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在一个遥远 ...
- Codevs 1066 引水入城 2010年NOIP全国联赛提高组
1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 在一个遥远的国度 ...
- 洛谷P1514 引水入城
洛谷P1514 引水入城 原题链接 一道好题...细节真多 第一次提交90分,然后就GG了,不知从何改起 其实比较简单吧... 首先,一个点的水流向最后一排,一定可以形成一个区间. 不行的话肯定GG ...
- 洛谷 P1514 引水入城 解题报告
P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 NN 行 \times M×M 列的矩形,如上图所示,其中每个格 ...
- 洛谷 P1514 【引水入城】
题库 :洛谷 题号 :1514 题目 :引水入城 link :https://www.luogu.org/problemnew/show/P1514 思路 :搜索从第一排开始能覆盖最后一排的区间L ~ ...
- 洛谷P1514 [NOIP2010提高组T4]引水入城
P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城 ...
- NOIP2010 引水入城
4引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个 ...
随机推荐
- Struct2的简单的CRUD配置和使用
1. 首先是Struct2使用的jar包,可以在官网下载https://struts.apache.org/ ,其中包只要下面这些就够用了. 或者点击下面链接下载 链接:https://pan.b ...
- 批量升级 CentOS bash
#! /usr/bin/env python #coding=utf-8 from fabric.api import * from fabric.state import * env.rol ...
- 题解 【SCOI2015】小凸玩矩阵
题面 解析 这题其实也是网络流建图.. 首先,转换下思路, 求第k大的数的最小值, 其实就是求一个最小的值, 使选取的点中能有(n-k+1)个的值比它小. 因此,可以采用二分答案, 每次判断一个值, ...
- input框输入手机号码分隔显示
在input框输入手机号码时,自动加入空格按照3,4,4位显示,如: 实现方法如下: <label>手机号码</label><input type="text& ...
- 漫话:什么是 https ?这应该是全网把 https 讲的最好的一篇文章了
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/m0_37907797/article/d ...
- Python 爬虫十六式 - 第六式:JQuery的假兄弟-pyquery
PyQuery:一个类似jquery的python库 学习一时爽,一直学习一直爽 Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 BeautifulSoup 美味 ...
- Codevs 1213 解的个数(exgcd)
1213 解的个数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 已知整数x,y满足如下面的条件: ax+by+c=0 p< ...
- 灰度图像--图像分割 霍夫变换(Hough Transform)--直线
学习DIP第50天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://gi ...
- java中报错:problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError
今天和往常一样打开项目,竟然报错problem with class file or dependent class; nested exception is java.lang.NoClassDef ...
- sh_19_字符串拆分和拼接
sh_19_字符串拆分和拼接 # 假设:以下内容是从网络上抓取的 # 要求: # 1. 将字符串中的空白字符全部去掉 # 2. 再使用 " " 作为分隔符,拼接成一个整齐的字符串 ...