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

 #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. 【KMP】Cyclic Nacklace

    KMP算法 next[]深入了解,做到这题才真正明白next[]的用法,希望后面的题目能理解的更深刻. Problem Description CC always becomes very depre ...

  2. C# 文件上传

     一.分析 本次博客,主要解决文件上传等一系列问题,将从两方面来论述,即1G以内文件和1G以上文件. 对于上传1G以内的文件,可以采用基本的三种上传方法:用Web控件FileUpload.html控件 ...

  3. yii 分页 (ajax)

    Controller:class MemberController extends Controller { public function actionmember_list()    {      ...

  4. BeanFactory调用getbean()对象

    Spring通过资源加载器加载相应的XML文件,使用读取器读取资源加载器中的文件到读取器中,在读取过程中,解析相应的xml文件元素,转化为spring定义的数据结BeanDefinition,把相应的 ...

  5. Java基础(十)内部类

    1.使用内部类的原因(3点) ①内部类方法可以访问该内部类定义所在的作用域中的数据,包括私有数据. ②内部类可以对同一个包中的其他类隐藏起来. ③当想要定义一个回调函数且不想编写大量代码时,使用匿名内 ...

  6. WIN7局域网文件共享设置方法

    WIN7局域网文件共享设置方法 工具/原料 两台电脑以上的局域网.WIN7操作系统 步骤/方法 1 右击桌面网络----属性----更改高级共享设置 (注释:查看当前网络 比如:家庭网络.公共网络 等 ...

  7. udp 不需要 listen

    accept()不是监听,accept()是接受新连接.listen()是进入监听状态,表示愿意接收连接请求.listen之后有连接请求就将其放到队列中,accept()时把新连接请求从队列中取出,建 ...

  8. UITextField点击return后注销第一响应者

    // 当点击了return按钮,就让text调用自己的endEditing方法 [textField addTarget:textField action:@selector(endEditing:) ...

  9. JAVA泛型解释

    理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作: 1 List<Apple> box = ...; 2 Apple apple ...

  10. Swift 变量、常量、数据类型

    import Foundation print("HelloSwift") // 声明变量 var a = var b = a = b = // 常量 let c = a+b va ...