简单的dfs加dp,搜索每个点的上下左右,然后寻找到每个点的最大长度,这里要注意的是每条路径的起始点和终点不同,所以每个最终点都要找一下最终长度,寻找最大的最终长度。
#includeusing 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] 0&&num[u][v-1] > 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 <