贪心+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 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个 ...
随机推荐
- Nuxt 服务端渲染
前言 Nuxt.js 是一个基于 Vue.js 的通用应用框架. ssr 渲染服务端 可以看官方文档 https://zh.nuxtjs.org/guide/ nuxt 与平常 jsonp 不一样 , ...
- HDU 6043 - KazaQ's Socks | 2017 Multi-University Training Contest 1
/* HDU 6043 - KazaQ's Socks [ 找规律 ] | 2017 Multi-University Training Contest 1 题意: 一共 n 双袜子编号 1~n,每天 ...
- Python GUI编程(Tkinter)Ⅱ
Tkinter 组件 Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用.这些控件通常被称为控件或者部件. 目前有15种Tkinter的部件.我们提出这些部件以及一个简短的介 ...
- 2019牛客暑期多校训练营(第二场)D bitset
题意 给一个n个结点的带点权的图,找到第k小的团的权值 分析 用bitset表示团的状态,一个结点必须和团里的每个结点都连边才能加进去,所以可以直接用\(\&\)运算来判断一个结点是否能加进去 ...
- python版本升级流程,升级2.7跟3.x版本流程一样
前言: 目前python2.6版本很多库已经不支持,在安装库的时候总会遇到很多装不上的事故,特别烦恼,所以以后不纠结,直接升级python版本后再使用,避免多次采坑:当然,未来趋势还是python3. ...
- Java线程之Callable、Future
简述 在多线程中有时候我们希望一个线程执行完毕后可以返回一些值,在java5中引入了java.util.concurrent.Callable接口,它类似于Runnable接口,但是Callable可 ...
- Linux 变量 $$ $! $? $- $# $* $@ $0 $n
[参考文章]:linux中shell变量$#,$@,$0,$1,$2的含义解释 1. 变量说明 1.1 $$ Shell本身的PID(ProcessID) 1.2 $! Shell最后运行的后台Pro ...
- TCP输入 之 tcp_v4_rcv
tcp_v4_rcv函数为TCP的总入口,数据包从IP层传递上来,进入该函数:其协议操作函数结构如下所示,其中handler即为IP层向TCP传递数据包的回调函数,设置为tcp_v4_rcv: sta ...
- list元素按照日期排序
private static void ListSort(List<AppClassInfoVo> list) { Collections.sort(list, new Comparato ...
- C++学习 之 初识命名空间
声明: 本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方. 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予 ...