题目链接 http://vjudge.net/problem/19213
那个VJ的域名改了。。。
解题思路
DAG上最短路。
代码
#include<stdio.h> #include<string.h> #define MAX_SIZE 105 int montain[MAX_SIZE][MAX_SIZE]; int dp[MAX_SIZE][MAX_SIZE]; int gox[] = {1, -1, 0, 0}; int goy[] = {0, 0, -1, 1}; int maxLen; int c, r; int solve(int x, int y) { int &ans = dp[x][y]; if(ans >0) return ans; ans = 1; for(int i=0; i<4; i++) if(x+gox[i]>=0 && x+gox[i]<c && y+goy[i]>=0 && y+goy[i]<r && montain[x+gox[i]][y+goy[i]] < montain[x][y]) { int temp = solve(x+gox[i], y+goy[i]) + 1; if(temp > ans) ans = temp; } return ans; } int main() { char name[40]; int cases; scanf("%d", &cases); while(cases--) { scanf("%s%d%d", name, &c, &r); for(int i=0; i<c; i++) for(int j=0; j<r; j++) scanf("%d", &montain[i][j]); memset(dp, 0, sizeof(dp)); maxLen = 0; for(int i=0; i<c; i++) for(int j=0; j<r; j++) { int t = solve(i, j); // printf("%d\n", t); if(t > maxLen) maxLen = t; } printf("%s: %d\n", name, maxLen); } return 0; }