。。。我觉得这道题放在贪心里应该不为过

原文: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:引水入城的更多相关文章

  1. vijos p1777 引水入城(bfs+贪心)

    引水入城   描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,其中每个格子都代表一座城市,每座城市都有一个海拔高度. 为了使 ...

  2. luoguP1514 引水入城 题解(NOIP2010)(Bfs+贪心)

    P1514 引水入城  题目 #include<iostream> #include<cstdlib> #include<cstdio> #include<c ...

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

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

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

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

  5. 洛谷P1514 引水入城

    洛谷P1514 引水入城 原题链接 一道好题...细节真多 第一次提交90分,然后就GG了,不知从何改起 其实比较简单吧... 首先,一个点的水流向最后一排,一定可以形成一个区间. 不行的话肯定GG ...

  6. 洛谷 P1514 引水入城 解题报告

    P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 NN 行 \times M×M 列的矩形,如上图所示,其中每个格 ...

  7. 洛谷 P1514 【引水入城】

    题库 :洛谷 题号 :1514 题目 :引水入城 link :https://www.luogu.org/problemnew/show/P1514 思路 :搜索从第一排开始能覆盖最后一排的区间L ~ ...

  8. 洛谷P1514 [NOIP2010提高组T4]引水入城

    P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城 ...

  9. NOIP2010 引水入城

    4引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个 ...

随机推荐

  1. linux高级技巧:heartbeat+lvs

    linux高级技巧:heartbeat+lvs   Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 He ...

  2. CentOS下Hadoop运行环境搭建

    1.安装ssh免密登录 命令:ssh-keygen overwrite(覆盖写入)输入y 一路回车 将生成的密钥发送到本机地址 ssh-copy-id localhost (若报错命令无法找到则需要安 ...

  3. Codeforces Round #451 (Div. 2) [ D. Alarm Clock ] [ E. Squares and not squares ] [ F. Restoring the Expression ]

    PROBLEM D. Alarm Clock 题 OvO http://codeforces.com/contest/898/problem/D codeforces 898d 解 从前往后枚举,放进 ...

  4. Sogou for Linux

    造冰箱的大熊猫,本文适用于Ubuntu 18.04@cnblogs 2019/5/8 在Ubuntu(安装时选择英文语言环境)下安装搜狗输入法 1)从搜狗官网下载sogou拼音输入法的deb安装包. ...

  5. C/C++ - malloc/free和new/delete的区分

    new/delete与malloc/free的区别主要表现在以下几个方面: 注意:最主要的区别,new/delete是运算符,而malloc/free是函数 (1).new能够自动计算需要分配的内存空 ...

  6. BFS解决九宫重排问题

    问题 1426: [蓝桥杯][历届试题]九宫重排 时间限制: 1Sec 内存限制: 128MB 提交: 215 解决: 47 题目描述 如下面第一个图的九宫格中,放着  1~8  的数字卡片,还有一个 ...

  7. mysql5.7外网访问

    GRANT ALL PRIVILEGES ON *.* TO '账号名称'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION; FLUSH PRIVILEGES; // ...

  8. Volatile关键字的两个作用

    1.保证修饰的变量对所有线程的可见性,这里的“可见性”是指当一条线程修改了这个值,新值对于其他线程来说是可以立即得知的. 2.禁止指令重新排序化

  9. LeetCode 77. 组合(Combinations)

    题目描述 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], ...

  10. LeetCode 75. 颜色分类(Sort Colors)

    题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...