数字三角形问题

news/2024/11/24 22:29:56/

数字三角形问题

  • 一、题目描述
  • 二、题目分析
    • 1、问题分析
    • 2、思路分析
      • (1)状态转移方程
        • 状态表示
        • 状态转移
      • (2)循环的设计
  • 三、代码实现

一、题目描述

在这里插入图片描述

二、题目分析

1、问题分析

这道题给我们的第一眼感觉就是情况太多了,太复杂了。而这种情况下,我们往往需要缩小问题的规模,从小问题看起,看清这道题的规律。

在这里插入图片描述
我们看上面图片中最左边的图,我们发现这个规模的问题就非常好解决了,我们只需要对比从1到2和从1到3谁大即可。

然后我们看中间的图片,我们的从最上方的5到下一层的方式有两种,要么到1,要么到4。在这个过程中,我们发现当它到1的时候,我们遇到了和左边相同的问题,也就是说左面的是中间的子问题。这个规律在第三个图中依然满足。
在这里插入图片描述

那么当一个问题满足这个特点的时候,我们就说这个问题具备重叠子问题的性质。

同时在我们每次选择过后,问题的规模都会减小,但是我们依旧需要做出最优选择,此时说明这个问题具备最优子结构

另外,我们解决大规模问题的时候,我们的小问题的最优解是没有发生变化的。而这种性质称作无后效性

当一道题的问题满足上述三个性质的时候,我们通常可以使用动态规划的方式去解决。

2、思路分析

既然要用动态规划的方式来解决这道题的话,我们就需要考虑两个问题:状态转移方程的书写、循环的设计

(1)状态转移方程

状态转移方程的作用就是利用子问题去解决问题,或者说是,将一个大规模问题转化为小规模问题。
而转移方程的书写我们还需要思考两个问题:
1、状态表示
2、状态转移

状态表示

我们发现,我们一个问题的规模其实就取决于最高点的那个坐标,所以我们将最高点的坐标作为状态的表示。

f(i,j)f(i,j)f(i,j)指的是,我们坐标为(i,j)(i,j)(i,j)的点向下走到底的时候,所能够经过路线的点的和的最大值

状态转移

我们根据我们刚刚举的例子,我们发现减小问题规模的关键就是在向左下和向右下走做出一个决定,然后在二者之间取出一个最大值。但是我们需要注意的是,我们向下走其实坐标值是在增大的。
在这里插入图片描述

如下:

f(i,j)=max{f(i+1,j+1)+w[i][j]f(i+1,j)+w[i][j]f(i,j)=max \begin{cases} f(i+1,j+1)+w[i][j]\\ f(i+1,j)+w[i][j] \end{cases} f(i,j)=max{f(i+1,j+1)+w[i][j]f(i+1,j)+w[i][j]

(2)循环的设计

我们相同规模的问题在同一行,所以我们最外层循坏一定是行数,那么第二层循环就是列数

我们一定是先从小规模的问题开始枚举,而最小规模的问题对应的是最大的下标。因此,我们只需要将第一层逆置过来即可,第二层是否逆置无所谓。

三、代码实现

#include<iostream>
using namespace std;
const int N=1e3+10;
int dp[N][N],a[N][N];
int n,m;
int main()
{cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++)scanf("%d",&a[i][j]);}for(int i=n;i>=1;i--){for(int j=1;j<=n;j++){dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+a[i][j];}}cout<<dp[1][1]<<endl;return 0;
}

http://www.ppmy.cn/news/6141.html

相关文章

机器学习 | 逻辑回归

一.基本原理 面对一个分类问题&#xff0c;建立代价函数&#xff0c;通过优化方法迭代求解出最优的模型参数&#xff0c;然后测试验证我们这个求解的模型的好坏。逻辑回归是一种分类方法&#xff0c;主要用于二分类问题&#xff0c;应用于研究某些事件发生的概率 二.优缺点 …

2021遥感应用组二等奖:基于长时序Landsat遥感影像的赣南脐橙时空变化分析

作品介绍 一、应用背景 自上世纪70年代开始种植脐橙以来,赣州大力实施“兴果富农”等战略,经过38年发展产业规模迅速壮大,目前赣州全市果业总面积263万亩,脐橙158万亩,产量超112万吨,成为种植面积世界第一、产量世界第三、全国最大的脐橙主产区,脐橙种植得到了大规模发…

2022下半年软考成绩公布后,这几件事你需要知道

2022下半年软考成绩公布&#xff0c;有人欢喜有人忧。考试就是一个竞技场&#xff0c;有赢就有输。整理心情之余&#xff0c;有些考后的注意事项还需要考生了解哦~ 01、软考合格标准 自2022年开始&#xff0c;软考的及格线实行固定标准&#xff1a;总分的60%&#xff0c;即为…

刷爆力扣之电话号码的字母组合

刷爆力扣之电话号码的字母组合 HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&…

【QGIS入门实战精品教程】3.4:QGIS创建GeoPackage地理数据库及数据入库案例详解

GeoPackage(以下简称gpkg),内部使用SQLite实现的一种单文件、与操作系统无关的地理数据库。在QGIS中可以很方便的实现GeoPackage的创建与连接等操作。 一、QGIS创建GeoPackage 1. 创建数据库 QGIS创建GeoPackage的方法与ArcGIS中创建File GDB的类似,选择一个目标文件夹,…

直播推流神器 Kplayer 手把手教你在B站7*24h全天直播

开始前的准备工作 Linux服务器 (1)KPlayer目前仅支持Linux环境并需要满足x86_64(amd64)与aarch64(arm64)CPU架构的硬件环境上运行&#xff0c;我们已经将相关依赖库静态链接至主程序中&#xff0c;这意味着你不需要额外的安装任何的第三方库来支持KPlayer的运行。 在后续的迭代…

Docker安装Nginx 反向代理服务器

前端代码扔在服务器上怎么运行&#xff0c;首先安装Nginx&#xff0c;这里我用Docker安装Nginx 文章目录一、安装nginx docker镜像1、 获取nginx官方镜像2、查看镜像库3、宿主机创建好要挂载的目录4、启动一个不挂载的容器5、配置文件挂载到宿主机6、停止/删除容器7、查看宿主机…

Android8.1屏蔽wifi和蓝牙设置选项(rockchip平台)

有些客户要求将Android系统的wifi和蓝牙开关选项给屏蔽掉,让用户不去打开使用,这个时候需要对系统设置和SystemUI的下拉菜单进行修改。 1.系统设置的修改 在packages/apps/Settings/res/xml/network_and_internet.xml布局文件中屏蔽掉wifi开关选项 --- a/packages/apps/Sett…