题解 P1434 【滑雪】

简介: 题目链接 此题运用功能强大的 ~~暴力搜索~~ 记忆化搜索才是重点!!! 然而,这是一道经典的DP问题 如果我们用$dis[i][j]$来表示坐标为$(i,j)$时的高度  $cnt[i][j]$ 是我们的记忆化数组 在合法的前提下,就有状态转移方程:  $dis[i][j]=max(dis[i...

题目链接

此题运用功能强大的 ~~暴力搜索~~

 记忆化搜索才是重点!!!

然而,这是一道经典的DP问题

 如果我们用$dis[i][j]$来表示坐标为$(i,j)$时的高度

 $cnt[i][j]$ 是我们的记忆化数组

在合法的前提下,就有状态转移方程:

 $dis[i][j]=max(dis[i-1][j],dis[i][j-1],dis[i+1][j],dis[i][j+1])$

好啦,直接上代码吧:其实挺暴力:

 $2^{33……}$

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;//头文件不说啥
int dis[100][100];
int cnt[100][100];
int row,col;//行列数
inline int DP(int i, int j)//状态转移
{
     int max1=0;
    
    if(cnt[i][j]>0)
        return cnt[i][j];//记忆化,如果被搜过,跳就好
    
    //判断dis[i][j-1]是否合法
    if(j-1>=0)//边界条件
      if(dis[i][j]>dis[i][j-1])//转移条件
        if(max1<DP(i,j-1))
          max1=DP(i,j-1);
    
    //判断dis[i][j+1]是否合法
    if(j+1<=col-1)
      if(dis[i][j]>dis[i][j+1])
        if(max1<DP(i,j+1))
            max1=DP(i,j+1);
    
    //判断dis[i-1][j]是否合法
     if(i-1>=0)
        if(dis[i][j]>dis[i-1][j])
        if(max1<DP(i-1,j))
          max1=DP(i-1,j);
    
    //判断dis[i+1][j]是否合法
    if(i+1<=row-1)
      if(dis[i][j]>dis[i+1][j])
        if(max1<DP(i+1,j))
          max1=DP(i+1,j);
 
    return cnt[i][j]=max1+1;//转移
}
int main()
{
    scanf("%d%d",&row,&col);//输入
     for(int i=0;i<=row-1;i++)
        for(int j=0;j<=col-1;j++)
          scanf("%d",&dis[i][j]);

    for(int i=0;i<=row-1;i++)//状态转移
        for(int j=0;j<=col-1;j++)
        DP(i, j);
        
    for(int i=0;i<=row-1;i++)//找最大值
        for(int j=0;j<=col-1;j++)
         if(cnt[0][0]<cnt[i][j])
            cnt[0][0]=cnt[i][j];

    printf("%d",cnt[0][0]);//输出
    return 0;//程序拜拜
}

 

相关文章
|
数据安全/隐私保护
[羊城杯 2020]easyre 1题解
buuctf-[羊城杯 2020]easyre 1题解
354 0
[羊城杯 2020]easyre 1题解
|
存储 算法 索引
LeetCode——824. 山羊拉丁文
LeetCode——824. 山羊拉丁文
72 0
LeetCode——824. 山羊拉丁文
|
Go 索引
LeetCode每日一题(6)——山羊拉丁文
山羊拉丁文 1.题目 2.示例 3.思路 4.代码 5.复杂度分析
116 0
|
测试技术
牛客网 手套
牛客网 手套
59 0
LeetCode每日一题——799. 香槟塔
我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟。
116 0
LeetCode每日一题——799. 香槟塔
|
机器学习/深度学习
洛谷P5022 旅行(基环树+断环法)
洛谷P5022 旅行(基环树+断环法)
103 0
|
索引
LeetCode每日一题——824. 山羊拉丁文
给你一个由若干单词组成的句子 sentence ,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。
92 0
|
定位技术 C++
|
计算机视觉 索引
824 山羊拉丁文 leetcode
824 山羊拉丁文 leetcode
63 0
|
算法
算法竞赛题解:乒乓球
算法竞赛题解:乒乓球
272 0