您的位置:首页 > 其它

UVa 10285 - Longest Run on a Snowboard

2013-06-15 17:09 369 查看
/*
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: