首页 > 其他分享 >POJ-1088 滑雪

POJ-1088 滑雪

时间:2022-12-22 11:46:47浏览次数:44  
标签:tx ty int res zb 1088 POJ 滑雪

POJ-1088 滑雪

有一个平面区域,上面有一些点,每个点对应一定的权值,每次移动只能从当前位置向上下左右四个方向中,权值小于当前位置权值的点移动,一次性最多可以移动多远(相邻位置移动一次为1)。

思路:

定义状态 \(f[i][j]\) 表示终点为 \((i,j)\) 的最长路径。

状态转移方程:

for (int i = 0; i < 4; i++)
{
    int tx = x + zb[i][0], ty = y + zb[i][1];
    if (a[x][y] < a[tx][ty])
        f[x][y] = max(f[x][y], dfs(tx, ty) + 1);
}

由于转移方程不仅仅涉及到 \(i - 1\) ,所以采用记忆化搜索的方法来实现。

实现:

#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 105;
int f[N][N], a[N][N];
int n, m;
int res = 0;
int zb[4][2] = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
int dfs(int x, int y)
{
    if (x == 0 || y == 0)
        return 0;
    if (f[x][y])
        return f[x][y];
    f[x][y] = 1;
    for (int i = 0; i < 4; i++)
    {
        int tx = x + zb[i][0], ty = y + zb[i][1];
        if (a[x][y] < a[tx][ty])
            f[x][y] = max(f[x][y], dfs(tx, ty) + 1);
    }
    res = max(res, f[x][y]);
    return f[x][y];
}

int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
        {
            scanf("%d", &a[i][j]);
        }
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            dfs(i, j);
    printf("%d\n", res);
    return 0;
}

标签:tx,ty,int,res,zb,1088,POJ,滑雪
From: https://www.cnblogs.com/zxr000/p/16998032.html

相关文章

  • POJ-2533 Longest Ordered Subsequence
    POJ-2533LongestOrderedSubsequence题意:给出一个序列,求出这个序列的最长上升子序列序列\(A\)的上升子序列\(B\)定义如下:\(B\)为\(A\)的子序列\(B\)为严......
  • POJ-1458 Common Subsequence
    POJ-1458CommonSubsequence题意:首先对最长子序列有个定义:如果一个字符串a可以由另一个字符串b删去某些元素得到,那么说明a就是b的子序列字符串现在有两个字符串,请问最......
  • [算法][解析几何]覆盖最多点固定半径圆问题 POJ1981 圆的扫描线 详细解法
    引题: 覆盖最多点固定半径圆问题改编自POJ1981CircleandPoint 背景:在二维平面中给定n个点,求半径为r的圆最多可以覆盖多少个点(1<=n<=300,精度eps=0.0001)输入......
  • 构建一个应用程序,用于在基于内存的数据库中存储 POJO(普通旧 Java 对象)
    本指南将引导您完成构建应用程序的过程,该应用程序使用SpringDataJPA在关系数据库中存储和检索数据。您将构建什么您将构建一个应用程序,用于在基于内存的数据库中存储PO......
  • POJ 2249 : Remmarguts' Date
    #include<iostream>#include<queue>#include<vector>usingnamespacestd;constintN=100000*2+1;#definempmake_pair#definepiipair<int,int>......
  • 洛谷 P1088 火星人(乱搞)
    题目大意:已知有一串数字,问在原来的数字串的字典序加m后,应该输出多少解题思路:最简便的做法是用next_permutation,这个生成的全排列可以按照字典序递增,这里我用的是搜索的方法......
  • POJ 2249 Remmarguts' Date
    #include<iostream>#include<vector>#include<queue>#include<cstring>#include<string>usingnamespacestd;typedeflonglongll;constllN=1e5+1111;......
  • [POJ1734]Sightseeing 观光之旅 题解
    无向图的最小环问题,前置芝士:\(\text{Floyd}\)传送门题目描述给定一张无向图,求图中一个至少包含\(3\)个点的环,环上的节点不重复,并且环上的边的长度之和最小。你需要......
  • 永嘉微电/VINKA原厂-VK1088B是超小体积LCD液晶段码屏显示驱动IC-22*4点 小体积1621,4*4
    产品品牌:永嘉微电/VINKA产品型号:VK1088B封装形式:QFN32(4MM*4MM)概述:VK1088B是一个点阵式存储映射的LCD驱动器,可支持最大88点(22SEGx4COM)的LCD屏,也支持2COM和3COM的LCD屏......
  • 滑雪
    题目链接:https://www.acwing.com/problem/content/903/题目描述给定一个R行C列的矩阵,表示一个矩形网格滑雪场。矩阵中第i行第j列的点表示滑雪场的第i行第j......