zoukankan      html  css  js  c++  java
  • hdu5024

    思路要开阔些,或者说要转化一下思路,别太死

    把每一个点当拐点,爆一边就能够。用记忆化搜索也行。都不会超时

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    #define o ans=max(ans,
    char C[105][105];
    
    int f(int i,int j,int a,int b){
        int k=0;
        while(1){
            if(i<0||j<0||i>=n||j>=n||C[i][j]!='.') break;
            i+=a; j+=b; k++;
        }
        return k;
    }
    
    int main()
    {
        while(scanf("%d",&n)&&n){
            for(int i=0;i<n;i++ ) scanf("%s",C[i]);
            int ans=-1;
            for(int i=0;i<n;i++)
            for(int j=0;j<n;j++){
                if(C[i][j]=='.'){
                    o f(i,j,0,1)+f(i,j,1,0)-1);
                    o f(i,j,0,1)+f(i,j,-1,0)-1);
                    o f(i,j,0,-1)+f(i,j,1,0)-1);
                    o f(i,j,0,-1)+f(i,j,-1,0)-1);
                    o f(i,j,-1,1)+f(i,j,1,1)-1);
                    o f(i,j,1,1)+f(i,j,1,-1)-1);
                    o f(i,j,-1,-1)+f(i,j,1,-1)-1);
                    o f(i,j,-1,-1)+f(i,j,-1,1)-1);
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 105
    int n;
    const int dx[]= {0,-1,0,1,-1,1,1,-1};
    const int dy[]= {-1,0,1,0,-1,-1,1,1};
    int dp[maxn][maxn][8] , ans;
    char mapp[maxn][maxn];
    int DFS(int x,int y,int dir){
        if(dp[x][y][dir]!=-1) return dp[x][y][dir];
        if(mapp[x +dx[dir] ][y+ dy[dir] ]=='.')
            return dp[x][y][dir]=1+DFS(x+dx[dir],y+dy[dir],dir);
        else return dp[x][y][dir]=1;
    }
    void cal(int x,int y,int d1,int d2){
        ans = max(ans, DFS(x,y,d1)+DFS(x,y,d2)-1);
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF && n){
            memset(mapp,1,sizeof(mapp));
                memset(dp,-1,sizeof(dp));
                ans=-1;
            for(int i=0;i<n;i++) scanf("%s",mapp[i]);
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
            {
                if(mapp[i][j]=='.'){
                    for(int k=0;k<4;k++){
                        cal(i,j,k%4,(k+1)%4);
                        cal(i,j,4+k%4,4+(k+1)%4);
                    }
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    


  • 相关阅读:
    【转载】Git和Repo扫盲——如何取得Android源代码 .
    【转载】玩转C链表
    【转载】彩色 LCD 接口
    【转载】LCD DBI接口与DPI接口
    【原创】Display interface types supported
    【转载】交叉编译的基本概念
    【转载】谈谈Linux内核驱动的coding style
    深层神经网络
    Renju 方案(draft)
    Mathematica练习
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6942124.html
Copyright © 2011-2022 走看看