当前位置: 首页 > news >正文

1258:【例9.2】数字金字塔

本题是一个用动态规划解决的问题,我们首先确定状态和状态转移方程,

对于这道题来说状态就是dp[i][j]从起点到(i,j)点的最大和,一个点的和可以由两种方法,一种是上一层的点(i,j-1),一种是左上角的点(i-1,j-1),在这两种方法的最大值的基础上加上自身的值就是我们的状态转移方程 dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+a[i][j]

有了状态和状态转移方程之后,我们需要注意一下边界,我们看第一列,这一列的元素是没有左上角的元素的,但是我们可以默认为0,这样也是合理的,所以我们不需要手动处理边界,对于边界的dp和其他元素正常处理即可,最后再注意本题是求所有dp中的最大值

#include <bits/stdc++.h>

using namespace std;

const int N = 1e3 + 10;
int a[N][N], dp[N][N];

/*
状态:dp[i][j] 从起点(1,1)到 (i,j) 途径产生的最大的和
状态方程 :dp[i][j] = max(dp[i-1][j],dp[i-1][j-1]) + a[i][j]
*/

int main() {

	int n; cin >> n;
	for (int i = 1; i <= n;i++) {
		for (int j = 1; j <= i;j++) {
			cin >> a[i][j];
		}
	}
	dp[1][1] = a[1][1];
	
	int maxx = 0;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= i;j++) {
			dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]) + a[i][j];
			maxx = max(maxx, dp[i][j]);
		}
	}
	
	cout << maxx << endl;

	return 0;
}

http://www.dtcms.com/a/26769.html

相关文章:

  • LED灯闪烁实验:实验介绍
  • 基于Python的Django+Hadoop民族服饰数据分析系统+毕业论文+指导搭建视频
  • Git是什么
  • DHCP详解,网络安全零基础入门到精通实战教程!
  • 常用网络工具分析(ping,tcpdump等)
  • 算法的解题模式Ⅲ
  • Python数据结构进阶:栈与队列的实现与应用
  • ollama使用教程
  • 我的2025年计划
  • 前OpenAI CTO Mira Murati创办AI新公司
  • 迪威模型网:免费畅享 3D 打印盛宴,科技魅力与趣味创意并存
  • golang panic信息捕获
  • JavaScript数组-数组中新增元素
  • 区块链(13):FISCO BCOS简介及安装
  • 智能指针讲解
  • 深度学习与人工智能资料推荐:DeepSeek整合包全解析
  • 智享AI直播三代系统,马斯克旗下AI人工智能直播工具,媲美DeepSeek!
  • 大摩闭门会:250218 学习总结报告
  • 排序算法:冒泡排序
  • ARM64 Trust Firmware [四]
  • 【鸿蒙开发】第三十八章 ArkTS代码调试
  • Spotify AI 技术(1)使用 TensorFlow 和 TF-Agents
  • 电脑机箱散热风扇声音大的影响因素
  • Linux I2C 命令
  • 最小二乘法原理分析
  • C语言指针学习笔记
  • 深入浅出TypedArray:网络数据处理、WebGPU与加密实战
  • 从入门到跑路(六)k8s配置ingress-nginx
  • 代码随想录算法【Day50】
  • Pycharm中查找与替换