zoukankan      html  css  js  c++  java
  • UVA 10285 Longest Run on a Snowboard

    UVA_10285

        这个题目可以用记忆化搜索实现,f[i][j]记录的是周边四个点可以深搜到的最大值加1。

        枚举一遍i、j并进行记忆化搜索即可。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 110
    char b[110];
    int N, M, a[MAXD][MAXD], f[MAXD][MAXD], max;
    int dx[] = {-1, 1, 0, 0}, dy[] = {0, 0, -1, 1};
    void init()
    {
    int i, j;
    scanf("%s%d%d", b, &N, &M);
    for(i = 0; i < N; i ++)
    for(j = 0; j < M; j ++)
    scanf("%d", &a[i][j]);
    }
    int dfs(int x, int y)
    {
    int i, j, newx, newy, m, temp;
    if(f[x][y] != -1)
    return f[x][y];
    m = 1;
    for(i = 0; i < 4; i ++)
    {
    newx = x + dx[i];
    newy = y + dy[i];
    if(newx >= 0 && newx < N && newy >= 0 && newy < M && a[newx][newy] > a[x][y])
    {
    temp = dfs(newx, newy);
    if(temp + 1 > m)
    m = temp + 1;
    }
    }
    return f[x][y] = m;
    }
    void solve()
    {
    int i, j, temp;
    memset(f, -1, sizeof(f));
    max = 1;
    for(i = 0; i < N; i ++)
    for(j = 0; j < M; j ++)
    {
    temp = dfs(i, j);
    if(temp > max)
    max = temp;
    }
    printf("%s: %d\n", b, max);
    }
    int main()
    {
    int t;
    scanf("%d", &t);
    while(t --)
    {
    init();
    solve();
    }
    return 0;
    }


  • 相关阅读:
    c++中利用宏定义简化for循环使用
    UVA1152- 枚举 /二分查找
    acm 模板
    Xwindow的文章
    编程语言博客
    csh与bash比较
    关于锁与并发的资料总结
    linux su和sudo命令的区别
    对Memcached使用的总结和使用场景
    iptables配置——NAT地址转换
  • 原文地址:https://www.cnblogs.com/staginner/p/2238349.html
Copyright © 2011-2022 走看看