首页 > 代码库 > hdu5024
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\n",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\n",ans); } return 0; }
hdu5024
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。