当前位置: 首页 > 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;
}

相关文章:

  • 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 [四]
  • 沧州制造展现硬核实力:管道装备支撑大国基建,核电锚栓实现国产
  • 复旦大学与上海杨浦共建市东医院
  • 陈宝良 高寿仙 彭勇︱明清社会的皇权、商帮与市井百态
  • 上海交大:关注到对教师邵某的网络举报,已成立专班开展调查
  • 首届上海老年学习课程展将在今年10月举办
  • 马克思主义理论研究教学名师系列访谈|曾瑞明:想通了才可能认准,认准了才能做好