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 |
测了这里所有的数据都没问题,但就是WA。。。抓狂。。。牛人指点!#include<iostream> #include<algorithm> using namespace std; int r, c; long ans; long map[102][102], f[101][101]; int op[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; long total = 0; struct node { long x, y, h; } que[10000]; int comp(node a, node b) { return a.h < b.h; } void init() { ans = 1; for (int i = 0; i != r + 2; i ++) { map[i][0] = map[i][c + 1] = 10001; } for (int i = 0; i != c + 2; i ++) { map[0][i] = map[r + 1][i] = 10001; } for (int i = 1; i != r + 1; i ++) for (int j = 1; j != c + 1; j ++) { scanf("%d", &map[i][j]); que[total].x = i; que[total].y = j; que[total].h = map[i][j]; f[i][j] = -1; total ++; } } void make(int x, int y) { f[x][y] = 1; for (int i = 0; i != 4; i ++) if (map[x + op[i][0]][y + op[i][1]] > map[x][y]) { if (f[x + op[i][0]][y + op[i][1]] == -1) make(x + op[i][0],y + op[i][1]); f[x][y] = max(f[x][y], f[x + op[i][0]][y + op[i][1]] + 1); if (f[x][y] > ans) ans = f[x][y]; } } void fill_in() { for (int i = 0; i != total; i ++) if (f[que[i].x][que[i].y] == -1) make(que[i].x, que[i].y); } void print() { printf("%d\n", ans); } int main() { while (scanf("%d%d", &r, &c) != -1) { init(); sort(que, que + total, comp); fill_in(); print(); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator