UVa 10285 - Longest Run on a Snowboard

来源:互联网 发布:淘宝最新搜索排名规则 编辑:程序博客网 时间:2024/06/01 08:30
/*DP: DAG上的最长路径*/#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>using namespace std;const int MAXN = 105;int m, n, t;char loc[MAXN];int grid[MAXN][MAXN];int d[MAXN][MAXN];int r, c;int x[4] = {-1, 0, 1, 0};int y[4] = {0, 1, 0, -1};int dp(int i, int j){    int &cur = d[i][j];    int &h = grid[i][j];    if(cur > 0) return cur;    cur = 1;    for(int k=0; k<4; k++) {        int tx = i + x[k];        int ty = j + y[k];        if(h > grid[tx][ty]) {            int val = dp(tx, ty);            if(val+1 > cur) cur = val + 1;        }    }    return cur;}int main(){    #ifndef ONLINE_JUDGE    freopen("in.txt", "r", stdin);    #endif    int T;    scanf("%d", &T);    while(T--) {        memset(grid, 0x7f, sizeof(grid));        scanf("%s%d%d", loc, &r, &c);        for(int i=1; i<=r; i++) {            for(int j=1; j<=c; j++) {                scanf("%d", &grid[i][j]);            }        }        memset(d, 0, sizeof(d));        int max_val = 1;        for(int i=1; i<=r; i++) {            for(int j=1; j<=c; j++) {                int val = dp(i, j);                if(val > max_val) max_val = val;            }        }        printf("%s: %d\n", loc, max_val);    }    return 0;}

原创粉丝点击