标签:editable 二维 tab 个数 max signed eps 数据 ring
1 5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
25
在dfs中记忆化搜索
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<queue> 7 #include<map> 8 #include<stack> 9 #include<list> 10 #include<set> 11 #include<vector> 12 #include<cstdlib> 13 #include<string> 14 #define eps 0.000000001 15 typedef long long ll; 16 typedef unsigned long long LL; 17 using namespace std; 18 const int INF=0x3f3f3f3f; 19 const int N=100+10; 20 int a[N][N]; 21 int dp[N][N]; 22 int m,n; 23 int _x[4]={0,-1,0,1}; 24 int _y[4]={1,0,-1,0}; 25 int judge(int x,int y){ 26 if(x<0||x>=n||y<0||y>=m)return 0; 27 return 1; 28 } 29 int DFS(int x,int y,int t){ 30 if(judge(x,y)==0) return 0; 31 if(a[x][y]>t) return 0; 32 if(dp[x][y]>=0)return dp[x][y]; 33 for(int i=0;i<4;i++){ 34 int xx=x+_x[i]; 35 int yy=y+_y[i]; 36 dp[x][y]=max(dp[x][y],DFS(xx,yy,a[x][y])+1); 37 } 38 return dp[x][y]; 39 } 40 int main(){ 41 int t; 42 scanf("%d",&t); 43 while(t--){ 44 scanf("%d%d",&n,&m); 45 for(int i=0;i<n;i++) 46 for(int j=0;j<m;j++){ 47 scanf("%d",&a[i][j]); 48 } 49 int maxx=0; 50 memset(dp,-1,sizeof(dp)); 51 for(int i=0;i<n;i++) 52 for(int j=0;j<m;j++){ 53 int ans=DFS(i,j,INF); 54 maxx=max(maxx,ans); 55 } 56 cout<<maxx<<endl; 57 } 58 }
标签:editable 二维 tab 个数 max signed eps 数据 ring
原文地址:http://www.cnblogs.com/Aa1039510121/p/6667068.html