不难分析出如果有解则每个蓄水厂所能覆盖到的干旱城市一定是连续的。否则,中间那些没被覆盖的部分永远都不能被覆盖到。

当然,每个蓄水厂所覆盖的城市有可能不连续,不过既然有解,则一定都是连续的。我们可以开一个mark数组来记录每个城市是否被覆盖过,如果有没被覆盖到的,就统计没被覆盖到的数量,并输出无解。否则,就将问题转换成一个最小线段覆盖问题,排序一下再贪心即可。

细节提示:一定要开记忆化搜索,不然会无限TLE(这TM不是P话)

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 500 + 5;
int n, m, mark[maxn], cnt;
int st[maxn], ed[maxn], h[maxn][maxn], A[maxn];
int vis[maxn][maxn];
void dfs(int x,int y)
{
if(vis[y][x]) return ;
vis[y][x] = 1;
if(y == n)
{
int cur = x;
mark[cur] = 1;
while(cur > 1 && h[y][cur-1] < h[y][cur]) mark[cur-1] = 1, cur -= 1;
st[cnt] = min(st[cnt],cur);
cur = x;
while(cur < m && h[y][cur+1] < h[y][cur]) mark[cur+1] = 1, cur += 1;
ed[cnt] = max(ed[cnt],cur);
}
if(y - 1 >= 1 && h[y-1][x] < h[y][x]) dfs(x,y-1);
if(y + 1 <= n && h[y+1][x] < h[y][x]) dfs(x,y+1);
if(x - 1 >= 1 && h[y][x-1] < h[y][x]) dfs(x-1,y);
if(x + 1 <= m && h[y][x+1] < h[y][x]) dfs(x+1,y);
}
bool cmp(int i,int j)
{
if(st[i] == st[j]) return ed[i] < ed[j];
return st[i] < st[j];
}
int main()
{
// freopen("input.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;++i)
for(int j = 1;j <= m;++j)scanf("%d",&h[i][j]);
for(int i = 1;i <= m;++i)
{
memset(vis,0,sizeof(vis));
A[i] = cnt = i;
st[cnt] = 1000, ed[cnt] = -1000;
dfs(i,1);
}
int unwatered = 0;
for(int i = 1;i <= m;++i)if(!mark[i]) ++ unwatered;
if(unwatered > 0)
{
printf("0\n");
printf("%d",unwatered);
return 0;
}
sort(A+1,A+1+m,cmp);
int pre = 1, ans = 0, i = 0;
while(pre < m)
{
while((st[A[i+1]] <= pre || st[A[i+1]] - pre == 1 )&& i < m)++i;
++ans;
pre = ed[A[i]];
}
printf("1\n");
printf("%d",ans);
return 0;
}

noip 2010 引水入城 贪心 + 搜索的更多相关文章

  1. [NOIP 2010] 引水入城

    搜索+贪心. 参考博客:http://blog.sina.com.cn/s/blog_8442ec3b0100xib1.html 主要是要看出来,如果有解的话,每个沿湖城市能够流到的范围是连续的区间. ...

  2. Luogu 1514 引水入城 (搜索,动态规划)

    Luogu 1514 引水入城 (搜索,动态规划) Description 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,如上图 ...

  3. [NOIP 2010]饮水入城 搜索+贪心

    考试的时候写了个dfs找出来了,最后处理的时候想到了贪心,但是正确性没有想通.然后想了想动规,也没想通.最后没办法,用状态的话用了个状压,弄了40分. 正解是bfs+贪心.Dfs也有过的. 下面题解引 ...

  4. [NOIP2010] 引水入城 贪心 + 记忆化搜索

    ---题面--- 题解: 本蒟蒻并没有想到bfs的做法,,,, 只会dfs了 首先我们需要知道一个性质. 我们设k[i].l 为在i点建立水库可以支援到的最左边的城市,k[i].r为最右边的. 那么点 ...

  5. NOIP2010 引水入城 贪心+DFS

    我们先把简单的不能搞死,具题意可证:每个蓄水长的管辖区域一定是连续的.证明:既然我们已经能了那么我们就可以说如果这个区间不是连续的那我们取出这个区间中间阻隔开的那一段,那么对于这一整个区间来说水源不可 ...

  6. Luogu P1514引水入城【搜索】 By cellur925

    题目传送门 这道题开始看好像并没有什么思路,和搜索好像也并没有什么关系.但是我们手玩下样例就会发现,思路其实就三句话:(写这道题的时候在代码里写的) //我们想知道从第1行的每列往下到干旱区的范围 / ...

  7. [NOIP 2010] 引入入城

    [题目链接] https://loj.ac/problem/2595 [算法] 显然 , 每个第一行的成市控制的一定是一段区间 那么 , 问题就转化为了经典的区间覆盖问题 , 贪心即可 , 时间复杂度 ...

  8. 引水入城 2010年NOIP全国联赛提高组(bfs+贪心)

    1066 引水入城 2010年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 在一个遥远 ...

  9. Codevs 1066 引水入城 2010年NOIP全国联赛提高组

    1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 在一个遥远的国度 ...

随机推荐

  1. Linux 常用密令总结 ------随用随记吧

    ubuntu or uqilin 目录文件类ls 查看目录cd 转到目录ps -aux查看所有进程grep 查找| 管道符 用户账户类 su 切换用户sudo 以管理员权限运行命令重启机器 reboo ...

  2. Atomic operations on the x86 processors

    On the Intel type of x86 processors including AMD, increasingly there are more CPU cores or processo ...

  3. 手动编译java的package问题,及演示继承的基本实现

    不用IDE,而直接用命令编译JAVA包,仔细看了下,作一个记录. 以下的URL值得收藏. http://www.aiuxian.com/article/p-2115485.html http://ww ...

  4. 【MVC框架】——什么是MVC框架

    学习了经典三层之后,认为不论什么一种框架都不再是难的.不管如何,都须要连接数据库.业务逻辑处理.显示.其余的无非就是给三层解耦合.解耦合越到位,这个框架就越easy被接受. 百度百科:MVC全名是Mo ...

  5. Tomcat启动时项目反复载入,导致资源初始化两次的问题

    近期在项目开发測试的时候,发现Tomcat启动时项目反复载入,导致资源初始化两次的问题  导致该问题的解决办法: 例如以下图:在Eclipse中将Server Locations设置为"Us ...

  6. GammaRay 是一个允许你查看 Qt 应用程序甚至在某种程度上修改它的独特应用,可谓是 Debugger 的良好补充

    GammaRay is a tool to poke around in a Qt-application and also to manipulate the application to some ...

  7. Java编程:切面条

    /* 一根高筋拉面,中间切一刀,能够得到2根面条. 假设先对折1次.中间切一刀.能够得到3根面条. 假设连续对折2次,中间切一刀.能够得到5根面条. 那么.连续对折10次.中间切一刀.会得到多少面条呢 ...

  8. c26---文件包含include

    // // main.c // 文件包含 #include <stdio.h> // 函数可以重复声明, 但不能重复定义 void test(); void test(); void te ...

  9. Linux - 配置php-fpm 以及 配置nginx支持php

    配置php-fpm [root@localhost php7]# which php-fpm /usr/local/php7/sbin/php-fpm [root@localhost php7]# p ...

  10. 现代英特尔® 架构上的 TensorFlow* 优化——正如去年参加Intel AI会议一样,Intel自己提供了对接自己AI CPU优化版本的Tensorflow,下载链接见后,同时可以基于谷歌官方的tf版本直接编译生成安装包

    现代英特尔® 架构上的 TensorFlow* 优化 转自:https://software.intel.com/zh-cn/articles/tensorflow-optimizations-on- ...