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;
    }
    


  • 相关阅读:
    联赛膜你测试20 T1 Simple 题解 && NOIP2017 小凯的疑惑 题解(赛瓦维斯特定理)
    P5518
    快速除法 / 取模
    P6860
    spoj LCMSUM
    虚树 学习笔记
    长链剖分 学习笔记
    CF526G
    P4292
    01 分数规划(water)
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6942124.html
Copyright © 2011-2022 走看看