Longest Run on a Snowboard UVA - 10285
非常非常简单的一道题,算是平复一下心情的时候写的
#include<iostream>
#include<string>
using namespace std;
const int MAXN = 105;
const int dr[] = {0, 0, 1, -1};
const int dc[] = {1, -1, 0, 0};
string name;
int N, R, C, height[MAXN][MAXN], d[MAXN][MAXN];
void init () {
cin >> name >> R >> C;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
cin >> height[i][j];
d[i][j] = 0;
}
}
}
bool inside (int i, int j) {
return i >= 0 && j >= 0 && i < R && j < C;
}
int dp (int i, int j) {
if (d[i][j] != 0) return d[i][j];
int &ans = d[i][j];
ans = 1;
for (int k = 0; k < 4; k++) {
if (inside(i+dr[k], j+dc[k]) && height[i][j] > height[i+dr[k]][j+dc[k]]) {
ans = max(ans, dp(i+dr[k], j+dc[k])+1);
}
}
return ans;
}
int main () {
cin >> N;
for (int i = 0; i < N; i++) {
init();
int ans = 0;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
ans = max(ans, dp(i, j));
}
}
cout << name << ": " << ans << endl;
}
return 0;
}