1https://www.shuzhiduo.com/A/Ae5RkboLdQ/

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=105,mod=1e9+7;
int a[N][N];
int n,m;
int tmp;int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
int h[N][N];//记录坐标(i,j)的答案,以(i,j)为起点的路径最长多少 int dfs(int x,int y){//以(x,y)为起点的遍历int mx=0;if(h[x][y])return h[x][y];// 记录为0的路径避免重复计算for(int i=0;i<4;i++){int nx=x+dx[i],ny=y+dy[i];if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]<a[x][y]){//递归出口:找不到更低的去处mx=max(mx,dfs(nx,ny));//递归体:只要能在周围找到能去的路径,递归调用去找能去路径的最大值}}return h[x][y]=mx+1;//最终求出周围路径最大值+1就是(x,y)为起点的最长滑坡长度
}
// dfs: 这个算法会尽可能深的搜索树的分支 ,#include<cstdio>
#include<algorithm>
using namespace std;
const int N=105,mod=1e9+7;
int a[N][N];
int n,m;
int tmp;int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
int h[N][N];//记录坐标(i,j)的答案,以(i,j)为起点的路径最长多少 int dfs(int x,int y){//以(x,y)为起点的遍历int mx=0;if(h[x][y])return h[x][y];// 记录为0的路径避免重复计算for(int i=0;i<4;i++){int nx=x+dx[i],ny=y+dy[i];if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]<a[x][y]){//递归出口:找不到更低的去处mx=max(mx,dfs(nx,ny));//递归体:只要能在周围找到能去的路径,递归调用去找能去路径的最大值}}return h[x][y]=mx+1;//最终求出周围路径最大值+1就是(x,y)为起点的最长滑坡长度
}
// dfs: 这个算法会尽可能深的搜索树的分支 ,时间复杂度为O(N)
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);}}int ans=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){ans=max(ans,h[i][j]);}}printf("%d\n",ans);
}
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);}}int ans=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){ans=max(ans,h[i][j]);}}printf("%d\n",ans);
}

2https://cloud.tencent.com/developer/article/1732131

#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long ll;
#define mst(a,b)  memset((a),(b),sizeof(a));
const int max1=105;
long long int dp[max1][max1];
//int sum[max1];
long long int ob[max1][max1];
int dx[5]={0,-1,0,1,0},dy[5]={0,0,-1,0,1};//dx与dy一组,构成上下左右四个方向
long long int r,//长c,//宽t,//做中间变量,用来寻找最大的ansans;//预设答案变量
int search(int x,int y);//声明search函数
int main()
{cin>>r>>c;//输入长宽ans=0;//无合适条件下设ans为最小值0for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)cin>>ob[i][j];//输入矩阵for(int i=1;i<=r;i++)for(int j=1;j<=c;j++){//遍历矩阵中每一个点t=search(i,j);//调用searc函数dp[i][j]=t;if(t>ans) ans=t;}cout<<ans<<endl;
}
int search(int x,int y)
{int w,tmp,nx,ny;if(dp[x][y]>0){ //如果dp大于0代表dp被调用过可以直接使用return(dp[x][y]);//返回dp[i][j]的值}w=1;for(int i=1;i<=4;i++){//遍历四个方向nx=x+dx[i];ny=y+dy[i];if((nx>=1)&&(nx<=r)&&(ny>=1)&&(ny<=c)&&(ob[x][y]<ob[nx][ny])){//边界tmp=search(nx,ny)+1;//递归求当前点能够到达的最大值if(tmp>w) w=tmp;}}dp[x][y]=w;return w;
}
/*
5 5
1  2  3  4  5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
*/

3https://blog.csdn.net/u011797040/article/details/88752799

#include<cstdio>
#include<iostream>
#include<algorithm>
#define SIZE 101
using namespace std;
int dfs(int i, int j);
int maze[SIZE][SIZE] = {0};
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
int dp[SIZE][SIZE];
int ans = 0;
int r,c;
int main(void){//输入 cin >> r >> c;for(int i = 0; i < r; i++){for(int j = 0; j < c; j++){cin >> maze[i][j];}}/*    for(int i = 0; i < r; i++){for(int j = 0; j < c; j++){printf("%d ",maze[i][j]);}printf("\n");}
*///处理 for (int i = 0; i < r; i++){for(int j = 0; j < c; j++){//    printf("%6d\n", t);int t = dfs(i,j);if (ans < t)ans = t;}}printf("%d\n", ans);return 0;
}int dfs(int i, int j){if(dp[i][j])return dp[i][j];dp[i][j] = 1; for(int a = 0; a < 4; a++){int x = j + dx[a], y = i + dy[a];if(x >= 0 && x < c && y >= 0 && y < r && maze[y][x] < maze[i][j]){dp[i][j] = max(dp[i][j], dfs(y, x) + 1);//走或不走,走就长度+1 }}return dp[i][j];
}
————————————————
版权声明:本文为CSDN博主「Vison307」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011797040/article/details/88752799

4https://blog.csdn.net/qq_31638535/article/details/83274584

#include <iostream>
#include<cstdio>
#include <time.h>
#include <cstring>int h[100][100]={0};   高度图
int count[100][100]={0};  ///记录每一个高点的最大滑雪长度
int f[][2]={{1,0},{0,1},{-1,0},{0,-1}};  ///这个在注释的代码有用,在做dfs的时候用这个,整个的dfs会显得简洁
int r,c;
int max_line = 0;int find(int i,int j)
{int max_t=0;if(count[i][j]>0)return count[i][j];/up searchif(i-1>=0){if(h[i-1][j]<h[i][j]){max_t = std::max(find(i-1,j),max_t);}}/down searchif(i+1<r){if(h[i+1][j]<h[i][j]){max_t = std::max(find(i+1,j),max_t);}}left searchif(j-1>=0){if(h[i][j-1]<h[i][j])max_t = std::max(find(i,j-1),max_t);}//right searchif(j+1<c){if(h[i][j+1]<h[i][j]){max_t = std::max(find(i,j+1),max_t);}}
///如果用下面的代码,那么这个函数以上四个遍历都可以注释掉了,这个是我参考网友的写法写的比较简洁,但思路一样,并不影响速度
//    for ( int z = 0 ; z < 4 ; z ++ )
//    {
//        int s = i + f[z][0] ;
//        int t = j + f[z][1] ;
//        if ( s < 0 || t < 0 || s >= r || t >= c )
//            continue;
//        if ( h[s][t] >= h[i][j] )
//            continue;
//        max_t = std::max ( max_t , find ( s , t ) ) ;
//    }count[i][j]=max_t+1;    /关键步骤,记下每一次深度搜索的结果,避免重复搜索return max_t+1; /如以上没有一个满足条件,就可以直接+1,由于递归,所以只要是经过的点都+1,刚好记录下深度信息
}
int main() {memset( count , -1 , sizeof ( count ) );scanf("%d%d", &r, &c);  scanf 是以回车一下作为输入数据的间隔printf("input h data");for (int i = 0; i < r; i++)for (int j = 0; j < c; j++){scanf("%d", &h[i][j]);//           h[i][j]=i+j;}clock_t start=clock();int ans = 0;for (int i = 0; i < r; i++)for (int j = 0; j < c; j++){count[i][j]=find(i,j);ans = std::max(ans, count[i][j]);}clock_t end=clock();std::cout<<"cost time :"<<double(end-start)/CLOCKS_PER_SEC*1000 <<"s"<<std::endl;printf("%d", ans);return 0;
}

关于滑雪问题的一些解法(综合自网络)相关推荐

  1. 实事求实来看综合布线网络

    综合布线系统克服了传统布线的缺点是指什么?如果是泛指过去的各种布线,则可能是言过其实."集成布线系统"是继综合布线系统发展之后的新技术.新概念吗?非也.关于综合布线系统工程范围的是 ...

  2. PHP带头大哥讲解几种综合PHP网络服务器系统的选择!

    大家知道,现在有很多基于PHP和Apache的综合服务系统,那么为什么老鸟要推荐是XAMPP和Vertrigo呢?而不是其它的呢? 让我们来看看都有那些基于PHP和Apache的综合服务系统呢? 目前 ...

  3. 69、弱电综合布线网络篇基础知识

    1.网线清单和定额套哪项合适 答:清单:4对对绞电缆,定额:敷设双绞线缆管.暗槽内穿放(4对以内). 拓展:网线常用的有:双绞线.同轴电缆.光纤等.双绞线和光纤都是网线的一种,其中,光纤造价较高,但有 ...

  4. 段鹏飞java_面向对象与多线程综合实验-网络编程

    教师:段鹏飞 实验5-实验目的 了解Java网络编程基础知识;掌握java.net包中关于网络的基本类及其属性和方法;掌握基于Socket的客户和服务器编程方法. 实验内容(必做) 编写程序,将前面课 ...

  5. 2022年华为ICT大赛 全球总决赛!中文综合任务书-网络赛道真题!

    目录 1 背景 2 网络 拓扑 图 2-1 IP网络拓扑 3 配置 目标 4 配置 任务

  6. 服务器上的安全数据没有此工作站信任关系的计算机账户_综合监控系统等级保护安全解决方案...

    建设背景 综合监控系统(ISCS)必须保证与相关系统间信息迅速.准确.可靠的传送,必须保证实现被集成系统的全部功能.综合监控系统面向的对象为控制中心的电调.环调.维调和总调(值班主任)及车站的值班站长 ...

  7. 综合布线系统 (布线系统的一种)

    文章目录 1.概述 2.基本介绍 3.技术特点 4.部件组成 5.发展趋势 6.优点 7.应用 1.概述 综合布线系统就是为了顺应发展需求而特别设计的一套布线系统 对于现代化的大楼来说,就如体内的神经 ...

  8. 计算机网络与综合布线系统设计,谈计算机网络综合布线系统设计

    <谈计算机网络综合布线系统设计>由会员分享,可在线阅读,更多相关<谈计算机网络综合布线系统设计(7页珍藏版)>请在装配图网上搜索. 1.谈计算机网络综合布线系统设计谈计算机网络 ...

  9. 电信计费综合管理系统

    川市电信局计算中心 张凌云  http://www2.ccw.com.cn/1998/25/168814.shtml 电信计费综合管理系统在电信市话业务综合管理系统中占有着重要的地位.传统的 计费系统 ...

最新文章

  1. C语言中的typedef
  2. android 判断横竖屏的方法
  3. (转)Django ==== 实战学习篇五 模板系统说明
  4. Teechart动态设计方法
  5. 什么不是预防计算机病毒的方法,预防计算机病毒的方法是什么
  6. 作者:高丰,英国南安普敦大学计算机博士,现为开放数据与创新独立咨询顾问,兼复旦大学数字与移动治理实验室特邀研究员。...
  7. 一只小蜜蜂(HDU-2044)
  8. 网络安全人才平均年薪 24.09 万,跳槽周期 31 个月,安全工程师现状大曝光!
  9. 如何让你的手机比别人最先升级到 Android L
  10. 数据结构专题(二):2.3链表插入元素,尾插法
  11. Lua开发工作笔记0001---什么是热更新为什么要热更
  12. Matlab报错警告: 启动 Connector 时出现问题及解决方案
  13. 图像处理_描述下SIFT特征?(清晰易懂)
  14. 自己封装的一个模拟下拉列表的插件
  15. 源码解析zxing条码边距及总宽度计算规则,附java使用zxing生成条形码,并去除条码两边空白
  16. linux清理dns缓存命令,Ubuntu下清空DNS缓存 提升访问速度
  17. 从“游击队”到“正规军”:虾神成长史
  18. Vijos 1836题:HYS与七夕节大作战
  19. FreeModbus源码结构分析
  20. xen html插件美化桌面,AliceStyle美化插件(十分强大的插件)

热门文章

  1. C++中字符编码的转换(Unicode、UTF-8、ANSI)
  2. "尼斯湖怪"是大象?英学者称揭开谜团
  3. 安卓手机在Linux电脑中的数据共享工具KDE Connect使用体验
  4. Hadoop入门试题
  5. ios开发中常用的数学函数
  6. java技术人员跳槽建议
  7. 信息管理毕设 基于SSM的停车位短租网站(含源码+论文)
  8. 测试账号在线生成工具
  9. kubernetes二进宫系列——Kubernetes TLS BootStrapping流程引导分析
  10. 关于redhat5.4的最新QT SDK的安装后无法编译运行的解决办法(我弄了好几天亲测好用)