uva10285-滑雪

题目链接 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;
}

 

posted @ 2016-09-11 10:17  啊嘞  阅读(240)  评论(0编辑  收藏  举报