比较简单的一道题目,按照dfs和动态规划来解即可,注意在dfs中ans被初始化为1,具体实现见如下代码:
#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<stack>
#include<queue>
#include<map>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<sstream>
#include<cstdio>
#include<deque>
using namespace std;
int R, C;
int N;
string name;
int area[110][110];
int dx[] = {0,-1,0,1};
int dy[] = {-1,0,1,0};
int dp[110][110];
int dfs(int i,int j){
if (dp[i][j] >= 0) return dp[i][j];
int& ans = dp[i][j];
ans = 1;
for (int t = 0; t < 4; t++){
int x, y;
x = i + dx[t];
y = j + dy[t];
if (x < 0 || x >= R || y < 0 || y >= C) continue;
if (area[x][y] < area[i][j])
ans = max(ans, dfs(x, y) + 1);
}
return ans;
}
int main(){
cin >> N;
while (N--){
cin >> name >> R >> C;
memset(dp,-1,sizeof(dp));
for (int i = 0; i < R; i++){
for (int j = 0; j < C; j++){
cin >> area[i][j];
}
}
int ans = 0;
for (int i = 0; i < R; i++){
for (int j = 0; j < C; j++){
ans = max(ans,dfs(i,j));
}
}
cout << name << ": " << ans << endl;
}
return 0;
}