[每日一题] 3.29 Longest Run on a Snowboard UVA - 10285 [动态规划]

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;
}

猜你喜欢

转载自blog.csdn.net/AdamAndTina/article/details/88897157