Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
感觉上好像不用递归会更快,62ms,一会去试试,哪位大牛提供更好的方法#include <iostream> using namespace std; //算法比较简明,就是搜索加数据存储 bool flags[100][100]; int max[100][100]; int elements[100][100]; int m, n; int maxlength(int i, int j) { if(max[i][j] >= 0) return max[i][j]; int temp[4] = {0}; if(i > 0 && elements[i][j] > elements[i - 1][j]) { temp[0] = maxlength(i - 1, j) + 1; flags[i - 1][j] = false; } if(j > 0 && elements[i][j] > elements[i][j - 1]) { temp[1] = maxlength(i, j - 1) + 1; flags[i][j - 1] = false; } if(j < n - 1 && elements[i][j] > elements[i][j + 1]) { temp[2] = maxlength(i, j + 1) + 1; flags[i][j + 1] = false; } if(i < m - 1 && elements[i][j] > elements[i + 1][j]) { temp[3] = maxlength(i + 1, j) + 1; flags[i + 1][j] = false; } int result = temp[0]; for(int k = 1; k < 4; ++ k) if(result < temp[k]) result = temp[k]; max[i][j] = result; return result; } int main() { int i; cin >> m >> n; for(i = 0; i < m; ++ i) for(int j = 0; j < n; ++ j) { cin >> elements[i][j]; max[i][j] = -1; flags[i][j] = true; } int nmax = 0; for(i = 0; i < m; ++ i) for(int j = 0; j < n; ++ j) if(flags[i][j]) { maxlength(i, j); if(nmax < max[i][j]) nmax = max[i][j]; } cout << nmax + 1 << endl; return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator