动态规划(2)
时间:2022-06-17
本文章向大家介绍动态规划(2),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目 trs喜欢滑雪。他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形。为了得到更快的速度,滑行的路线必须向下倾斜。 例如样例中的那个矩形,可以从某个点滑向上下左右四个相邻的点之一。例如24-17-16-1,其实25-24-23…3-2-1更长,事实上这是最长的一条。
输入格式:
第1行: 两个数字r,c(1< =r,c< =100),表示矩阵的行列。 第2..r+1行:每行c个数,表示这个矩阵。
输出格式:
仅一行: 输出1个整数,表示可以滑行的最大长度。
样例输入
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 样例输出
25
分析题目: 题目是从某个点出发,那么假设先从h[0][0]开始 它的初始值距离为1,而后向选择4个方向走 有f[i][j]表示每个起始点的最大滑行距离,然后用dfs记忆搜索
状态转移方程
f[x][y] = max(f[x][y], DFS(x, y - 1) + 1); f[x][y] = max(f[x][y], DFS(x, y - 1) + 1); f[x][y] = max(f[x][y], DFS(x + 1, y) + 1); f[x][y] = max(f[x][y], DFS(x, y + 1) + 1);
#include "bits/stdc++.h"
using namespace std ;
const int maxN = 110 ;
int h[maxN][maxN] , f[maxN][maxN] ;
int n, m, ans = 1;
int DFS(int x, int y)
{
if( f[x][y] )//判断是否被搜索过
return f[x][y];
f[x][y] = 1;
if(x > 1 && h[x][y] < h[x - 1][y])
f[x][y] = max(f[x][y], DFS(x - 1, y) + 1);
if(y > 1 && h[x][y] < h[x][y - 1])
f[x][y] = max(f[x][y], DFS(x, y - 1) + 1);
if(x < n && h[x][y] < h[x + 1][y])
f[x][y] = max(f[x][y], DFS(x + 1, y) + 1);
if(y < m && h[x][y] < h[x][y + 1])
f[x][y] = max(f[x][y], DFS(x, y + 1) + 1);
ans = max(ans, 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" , &h[i][j] ) ;
for(int i = 1 ; i <= n ; i++ )
for(int j = 1 ; j <= m ; j++ )
f[i][j] = DFS( i , j ) ;
printf("%d", ans);
return 0;
}
- 详解 Android Activity 生命周期
- 设计模式:装饰者模式
- 详解 常量指针和指针常量
- python 列表 总结
- 详解c++指针的指针和指针的引用
- QTableView 一列添加两个按钮
- [个人翻译]Redis 集群教程(上)
- Docker实践--部署Nodejs应用
- 【权限的思考】(一)使用反射实现动态权限
- 【swift学习笔记】一.页面转跳的条件判断和传值
- 【swift学习笔记】二.页面转跳数据回传
- 【swift学习笔记】三.使用xib自定义UITableViewCell
- 【swift学习笔记】四.swift使用Alamofire和swiftyJson
- 【swift学习笔记】五.使用枚举优雅的管理Segue
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [Maven][maven-site-plugin]告警[WARNING] No project URL defined - decoration links will not be relativi
- QListWidget添加删除
- 使用GitHub Actions编译项目并将Jar发布到Maven Central仓库
- 为啥Flutter Hooks没有受到太多关注和青睐?
- 二叉搜索树删除节点 动画演示
- 并发与竞态 (自旋锁)
- [Maven][taglist-maven-plugin]告警[WARNING] Using legacy tag format
- [Maven][l10n-maven-plugin]告警[WARNING] No dictionary file under folder
- Python基础之多文件项目的演练
- Python中的命名空间和作用域(1)
- 浅谈Mybatis持久化框架在Spring、SSM、SpringBoot整合的演进及简化过程
- 玩转注册表,这几个windowsAPI函数就够了
- 施工专题第11篇:Python 包和模块使用总结
- Node.js-具有示例API的基于角色的授权教程
- 删库时,我后悔没早学会的数据库知识