题意:

给你一个矩阵 ,你能往各个方向走(不走出去就行),每次只能上下左右走一格,问路径上的点权最大值和最小值的差最小是多少。

思路:

首先 二分最后的答案,

暴力枚举当前的区间是啥。

DFS 就OK 了

(我的代码可能有点儿小问题…… 枚举的时候没有判左上角的点)

(但是AC了哈哈哈)

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,Map[105][105],a[105][105],maxx=0,minn=120,Right,Left,Mid,ans;
int xx[]={1,-1,0,0},yy[]={0,0,1,-1};
bool vis[105][105];
bool dfs(int x,int y,int Maxx,int Minn){
// printf("%d %d\n",x,y);
if(x==n&&y==n)return 1;
for(int i=0;i<=3;i++){
if(!vis[x+xx[i]][y+yy[i]]){
vis[x+xx[i]][y+yy[i]]=1;
if(a[x+xx[i]][y+yy[i]]>Maxx&&a[x+xx[i]][y+yy[i]]-Minn<=Mid){
if(dfs(x+xx[i],y+yy[i],a[x+xx[i]][y+yy[i]],Minn))return 1;
}
else if(a[x+xx[i]][y+yy[i]]<Minn&&Maxx-a[x+xx[i]][y+yy[i]]<=Mid){
if(dfs(x+xx[i],y+yy[i],Maxx,a[x+xx[i]][y+yy[i]]))return 1;
}
else if(a[x+xx[i]][y+yy[i]]>=Minn&&a[x+xx[i]][y+yy[i]]<=Maxx){
if(dfs(x+xx[i],y+yy[i],Maxx,Minn))return 1;
}
}
}
return 0;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&Map[i][j]);
maxx=max(maxx,Map[i][j]);
minn=min(minn,Map[i][j]);
}
}
Right=100;Left=0;
while(Left<=Right){
// printf("%d %d\n",Left,Right);
Mid=(Left+Right)/2;int f=0;
for(int ii=minn;ii<=maxx;ii++){
memset(vis,0,sizeof(vis));memset(a,0xcf,sizeof(a));
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(Map[i][j]<=ii+Mid&&Map[i][j]>=ii){
a[i][j]=Map[i][j];
}
}
}
if(dfs(1,1,Map[1][1],Map[1][1]))f=1;
}
if(f)Right=Mid-1,ans=Mid;
else Left=Mid+1;
}
printf("%d\n",ans);
}

POJ 2110 二分+暴搜的更多相关文章

  1. poj 3080 Blue Jeans(水题 暴搜)

    题目:http://poj.org/problem?id=3080 水题,暴搜 #include <iostream> #include<cstdio> #include< ...

  2. hdu 4400 离散化+二分+BFS(暴搜剪枝还超时的时候可以借鉴一下)

    Mines Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  3. POJ 1945 暴搜+打表 (Or 暴搜+判重)

    思路: 呃呃 暴搜+打表 暴搜的程序::稳稳的TLE+MLE (但是我们可以用来打表) 然后我们就可以打表过了 hiahiahia 可以证明最小的那个数不会超过200(怎么证明的我也不知道),然后就直 ...

  4. [POJ 1204]Word Puzzles(Trie树暴搜&amp;AC自己主动机)

    Description Word puzzles are usually simple and very entertaining for all ages. They are so entertai ...

  5. POJ 1414 暴搜

    题意比较复杂 (但是很好理解) 大概意思是给你等边三角形(详见题目中的图). 最后一行有n个数,下一次要填的数是c. 里面预先已经填好了数字.(0为未填) 得分的标准是这个分数的连通块周围没有空的地方 ...

  6. POJ 3188暴搜

    题意: 思路: 裸的暴搜 --. 但是要注意如果你不用所有的按键就能输出最优解的话一定要把所有的字母都安排到一个位置-. 我的一群PE就是这么来的-- 为什么写的人这么少-- // by Sirius ...

  7. POJ 2132 暴搜OR Floyd

    题意: 给你一个邻接矩阵(n<=25)问所有1到2路径的gcd的lcm是多少. 一些经验(WA/TLE的经验): 1. 无脑暴搜 是会TLE的--. 2. 关于精度 dyf神牛说了:long l ...

  8. POJ 2133 暴搜

    题意: 思路: 按照题意暴搜 注意 如果目标串==给的串 答案是2 //By SiriurRen #include <cstdio> #include <cstring> #i ...

  9. 模拟 + 暴搜 --- Help Me with the Game

    Help Me with the Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3175   Accepted: ...

随机推荐

  1. leetCode(46):Kth Smallest Element in a BST

    Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Not ...

  2. C++字符串操作笔试题第二波

    //1.字符串替换空格:请实现一个函数,把字符串中的每一个空格替换成"%20". //比如输入"we are happy.".则输出"we%20are ...

  3. node14---分层结构数据库操作

    /**回调函数(函数作为参数): 0. 外层函数调用的地方,一定是外层函数体先执行,回调函数和普通函数地址一样,然后看函数体规定回调函数怎么执行. 1. 异步时候使用回调函数, 无论是否异步,回调函数 ...

  4. node09---中间件

    如果我的的get.post回调函数中,没有next参数,那么就匹配上第一个路由,就不会往下匹配了. 如果想往下匹配的话,那么需要写next() 1app.get("/",funct ...

  5. ubuntu16.04环境下安装配置openface人脸识别程序

    参考http://blog.csdn.net/weixinhum/article/details/77046873 最近项目需要用到人脸训练和检测的东西,选用了OpenFace进行,因而有此文. 本人 ...

  6. sicily 1342 开心的金明 (动规)

    刷一下简单的背包问题 以下为代码: //1342. 开心的金明 #include <iostream> using namespace std; #define MAX(a,b) a> ...

  7. 银行bank系统项目实践

    想看项目的注意了!完整版银行管理系统就在这里看不看你看着办! 按照惯例咱们还是先来看一下项目需求: 某银行为了提高业务率希望开发一个银行管理系统功能如下: 1.能够完成用户开户操作 2.能够完成用户取 ...

  8. 固定执行计划-SQL PROFILE手工绑定

    固定(稳定)执行计划 你的应用的功能时快时慢,变化比较大,功能的性能能够保持一种稳定的状态,ORACLE 固定执行计划,采用以下这几种方式 oracle 9i使用 Outline oracle 10g ...

  9. 关于 jsp java servlet 中文汉字乱码的解决方法

    在servlet类中的get,post最前面加上 req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding(&quo ...

  10. HDU 5273 Dylans loves sequence【 树状数组 】

    题意:给出n个数,再给出q个询问,求L到R的逆序对的个数 先自己写的时候,是每次询问都重新插入来求sum(r)-sum(l) 果断T 后来还是看了别人的代码---- 预处理一下,把所有可能的区间的询问 ...