uva10285

it2022-05-23  56

简单的dfs加dp,搜索每个点的上下左右,然后寻找到每个点的最大长度,这里要注意的是每条路径的起始点和终点不同,所以每个最终点都要找一下最终长度,寻找最大的最终长度。

#include <bits/stdc++.h> using namespace std; const int maxn=10000; string s; int n,r,c; int num[maxn][maxn],d[maxn][maxn]; int dp(int u,int v) { if(d[u][v]) return d[u][v]; d[u][v]=1; if(u-1>0&&num[u-1][v]<num[u][v]) d[u][v]=max(d[u][v],dp(u-1,v)+1); if(u+1<=r&&num[u+1][v]<num[u][v]) d[u][v]=max(d[u][v],dp(u+1,v)+1); if(v-1>0&&num[u][v-1]<num[u][v]) d[u][v]=max(dp(u,v-1)+1,d[u][v]); if(v+1<=c&&num[u][v+1]<num[u][v]) d[u][v]=max(dp(u,v+1)+1,d[u][v]); return d[u][v]; } int main() { int t; cin >> t; getchar(); while(t--) { cin >> s >> r >> c; memset(d,0,sizeof(d)); memset(num,0,sizeof(num)); for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) cin >> num[i][j]; int maxi=1; for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) maxi=max(maxi,dp(i,j)); cout << s << ": " << maxi <<endl; } return 0; }

 

转载于:https://www.cnblogs.com/Wangwanxiang/p/6440971.html

相关资源:数据结构—成绩单生成器

最新回复(0)