[POJ_1088]滑雪
2011-08-23 10:56
246 查看
#include <iostream> using namespace std; int* data; int* track; int row, col, size; int best_length = 0; /* void print_data(int* array) { for (int r=0; r<row; r++) { for (int c=0; c<col; c++) { int idx = r * col + c; cout << array[idx] << " "; } cout << endl; } } */ int rc2i(int r, int c) { return r * col + c; } void i2rc(int i, int& r, int& c) { r = i / col; c = i % col; } int get_best_length(int i) { // is it calculated before? if (track[i] != -1) return track[i]; int r = i / col; int c = i % col; int curr_best = 1; if (c != 0) { int left = rc2i(r, c-1); if (data[left] < data[i]) { int len = get_best_length(left) + 1; if (len > curr_best) curr_best = len; } } if (c != col-1) { int right = rc2i(r, c+1); if (data[right] < data[i]) { int len = get_best_length(right) + 1; if (len > curr_best) curr_best = len; } } if (r != 0) { int up = rc2i(r-1, c); if (data[up] < data[i]) { int len = get_best_length(up) + 1; if (len > curr_best) curr_best = len; } } if (r != row-1) { int bot = rc2i(r+1, c); if (data[bot] < data[i]) { int len = get_best_length(bot) + 1; if (len > curr_best) curr_best = len; } } track[i] = curr_best; return curr_best; } int main() { cin >> row >> col; size = row * col; data = new int[size]; track = new int[size]; for (int i=0; i<size; i++) { cin >> data[i]; track[i] = -1; } for (int i=0; i<size; i++) { int length = get_best_length(i); if (best_length < length) best_length = length; } cout << best_length; delete[] data; return 1; }
相关文章推荐
- POJ 1088-滑雪(记忆化搜索)
- POJ 1088 滑雪(经典二维动态规划)【模板】
- poj 1088 滑雪 简单的记忆化搜索/dp
- 动态规划 POJ 1088 滑雪
- POJ - 1088 滑雪 DP+记忆化搜索
- poj 1088 滑雪 DP
- poj 1088 滑雪 动态规划
- 【DP】POJ 1088 滑雪
- 滑雪-POJ-1088
- 递归搜索:滑雪 POJ - 1088
- 记忆搜索练习:Poj 1088题 滑雪
- ACM学习-POJ-1088-滑雪
- poj1088-滑雪-记忆化搜索
- poj 1088 滑雪
- POJ1088 滑雪
- POJ 1088 滑雪 -- 动态规划
- POJ 1088 滑雪(输出对比)
- poj 1088滑雪题目
- poj-1088-滑雪
- POJ-1088-滑雪