此题一开始用暴力做,后来发现斜着走的时候其实暴力不太好写,于是改用搜索写了

 #include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std; char a[][]= {};
int down[][]= {};
int up[][]= {}; int cnt[][][]= {};
int n;
int dx[]= {-,,-, };
int dy[]= {-,, ,-};
int dfs(int curx,int cury,int num)
{
if(curx< || cury< || curx>=n || cury>=n)
return ;
int &ans=cnt[curx][cury][num];
if(a[curx][cury]=='#')
return ans=;
return ans=+dfs(curx+dx[num],cury+dy[num],num);
} int getMax()
{
int ans=;
for(int i=; i<n; i++)
for(int j=; j<n; j++)
{
ans=max(ans,down[i][j]+up[i][j]-);
}
return ans;
} int main()
{
freopen("in.txt","r",stdin); while(scanf("%d",&n),n)
{
memset(down,,sizeof down);
memset(up,,sizeof up);
memset(cnt,,sizeof cnt);
for(int i=; i<n; i++)
scanf("%s",a[i]); for(int i=; i<n; i++)
for(int j=; j<n; j++)
{
if(a[i][j]=='#')
{
up[i][j]=down[i][j]=; }
else
{
up[i][j]=down[i][j]=;
if(i!=)
up[i][j]=up[i-][j]+;
if(j!=)
down[i][j]=down[i][j-]+;
}
} int ans=;
ans=max(ans,getMax()); memset(down,,sizeof down);
memset(up,,sizeof up);
for(int i=n-; i>=; i--)
for(int j=n-; j>=; j--)
{
if(a[i][j]=='#')
{
up[i][j]=down[i][j]=;
}
else
{
up[i][j]=down[i][j]=;
if(i!=n-)
up[i][j]=up[i+][j]+;
if(j!=n-)
down[i][j]=down[i][j+]+;
}
} ans=max(ans,getMax()); //---------------------------
memset(down,,sizeof down);
memset(up,,sizeof up);
for(int i=; i<n; i++)
for(int j=n-; j>=; j--)
{
if(a[i][j]=='#')
{
up[i][j]=down[i][j]=;
}
else
{
up[i][j]=down[i][j]=;
if(i!=)
up[i][j]=up[i-][j]+;
if(j!=n-)
down[i][j]=down[i][j+]+;
}
} ans=max(ans,getMax());
//-------------------------------
memset(down,,sizeof down);
memset(up,,sizeof up);
for(int i=n-; i>=; i--)
for(int j=; j<n; j++)
{
if(a[i][j]=='#')
{
up[i][j]=down[i][j]=;
}
else
{
up[i][j]=down[i][j]=;
if(i!=n-)
up[i][j]=up[i+][j]+;
if(j!=)
down[i][j]=down[i][j-]+;
}
} ans=max(ans,getMax());
//-------------------------------------------------- for(int i=; i<n; i++)
for(int j=; j<n; j++)
{
for(int num=; num<; num++)
{
dfs(i,j,num);
}
} for(int i=; i<n; i++)
for(int j=; j<n; j++)
{
ans=max(ans,cnt[i][j][]+cnt[i][j][]-);
ans=max(ans,cnt[i][j][]+cnt[i][j][]-);
ans=max(ans,cnt[i][j][]+cnt[i][j][]-);
ans=max(ans,cnt[i][j][]+cnt[i][j][]-);
} cout<<ans<<endl;
}
return ;
}

hdu5024-Wang Xifeng's Little Plot的更多相关文章

  1. hdu5024 Wang Xifeng's Little Plot (水

    http://acm.hdu.edu.cn/showproblem.php?pid=5024 网络赛 Wang Xifeng's Little Plot Time Limit: 2000/1000 M ...

  2. HDU 5024 Wang Xifeng's Little Plot (DP)

    题意:给定一个n*m的矩阵,#表示不能走,.表示能走,让你求出最长的一条路,并且最多拐弯一次且为90度. 析:DP,dp[i][j][k][d] 表示当前在(i, j)位置,第 k 个方向,转了 d ...

  3. 2014 网选 5024 Wang Xifeng's Little Plot

    题意:从任意一个任意一个可走的点开始找一个最长的路,这条路如果有转弯的话, 那么必须是 90度,或者没有转弯! 思路: 首先用dfs将所有可走点开始的 8 个方向上的线段的最长长度求出来 ! step ...

  4. HDU 5024 Wang Xifeng's Little Plot(枚举)

    题意:求一个图中只有一个90°拐点的路的最大长度. 分析:枚举每一个为'.'的点,求出以该点为拐点的八种路中的最大长度,再比较所有点,得出最大长度即可. 如上样例,这样是个90°的角... 注意:最多 ...

  5. HDU 5024 Wang Xifeng&#39;s Little Plot 搜索

    pid=5024">点击打开链接 Wang Xifeng's Little Plot Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  6. [ACM] HDU 5024 Wang Xifeng&#39;s Little Plot (构造,枚举)

    Wang Xifeng's Little Plot Problem Description <Dream of the Red Chamber>(also <The Story of ...

  7. 2014 ACM/ICPC Asia Regional Guangzhou Online

    Wang Xifeng's Little Plot http://acm.hdu.edu.cn/showproblem.php?pid=5024 预处理出每个点八个方向能走的最远距离,然后枚举起点,枚 ...

  8. The 2014 ACMICPC Asia Regional Guangzhou Online

    [A]-_-/// [B]线段树+位运算(感觉可出) [C]地图BFS,找最长线 [D]地图BFS,加上各种复杂情况的最短路-_- [E]-_-/// [F]三分+圆与线段的交点,计算几何 [G]-_ ...

  9. matlab画图函数plot()/set/legend

    简单plot()/legend/XY轴范围axis 除了坐标轴信息外还可以添加其它的信息,如所画曲线的信息等:测试代码如下 x=0:pi/20:2*pi; y1=sin(x); y2=cos(x); ...

随机推荐

  1. cURL中的超时设置

    访问HTTP方式很多,可以使用curl, socket, file_get_contents() 等方法. 在访问http时,需要考虑超时的问题. CURL访问HTTP: CURL 是常用的访问HTT ...

  2. java-下载excel

    在java程序里面处理excel,我觉得比较方便的方式是先做出一个excel的模板(比如定义表头信息.表格名称等),然后根据这个模板往里面填充数据 我这里演示的是使用poi处理2007以上版本的exc ...

  3. python socket实例练习

    Web Server是基于Socket编程,又称之为网络编程,socket是网络编程接口,socket可以建立网络连接,读数据,写数据.socket模块定义了一些常量参数,用来指定socket的的地址 ...

  4. Mac Dock 效果及原理(勾股定理)

    这个是苹果机上的 Dock 效果,Windows 上也有一款专门的模拟软件——RocketDock. 代码如下: <!doctype html> <html> <head ...

  5. 远程连接mysql,mysql如何开启远程连接

    很多时候,mysql只需要开本地连接,也就是本机(服务器本身)连接就可以,默认也是这样,默认也不支持远程连接 但有的时候,我们需要将mysql独立出一台主机或数据库,放到另一台机器的时候,这时,就需要 ...

  6. SurfaceView类透明背景设置

    将SurfaceView背景设置为透明,主要添加以下几句话就可以了: 在SurfaceView创建后设置一下下面的参数: setZOrderOnTop(true); getHolder().setFo ...

  7. 最长回文字符串(manacher算法)

    偶然看见了人家的博客发现这么一个问题,研究了一下午, 才发现其中的奥妙.Stupid. 题目描述:      回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串. ...

  8. Jquery autocomplete 插件使用

    轻松实现类似百度输入框联想功能: autocomplete 是一个很厉害的插件,该插件基于jquery,在jquery官网能下载到最新版本. 首先,jQuery UI 是基于 jQuery 的,所以, ...

  9. C#Transfrom

    代码如下: private void btnConvertType_Click(object sender, EventArgs e) { if (rdo_btn_ConvertObject.Chec ...

  10. Word01-从正文处开始插入页码

    一份正式的文档应该由以下几部分组成:封面.目录.摘要.正文…… 现在要求前三页不需要插入页码,从正文部分插入页码为第一页,原文档如下: 步骤: 第一步:将光标移动到摘要页的末尾,选择页面部局--> ...