首页 > 其他分享 >动态规划————数字三角形

动态规划————数字三角形

时间:2024-09-05 20:25:25浏览次数:11  
标签:数字 int 路径 样例 一行 一列 三角形 动态

动态规划 ————数字三角形

题干

题目描述
观察下面的数字金字塔。

写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。
达右下方的点。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

在上面的样例中,从 7→3→8→7→5 的路径产生了最大

在上面的样例中,从 7→3→8→7→5 的路径产生了最大

输入格式
第一个行一个正整数 r ,表示行的数目。

后面每行为这个数字金字塔特定行包含的整数。

输出格式
单独的一行,包含那个可能得到的最大的和。

样例 #1
样例输入 #1
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出 #1
30
提示
【数据范围】 对于 100% 的数据,1≤r≤10001≤r≤1000,所有输入在 [0,100] 范围内。

思路

分析数据,我们可以发现:
在这里插入图片描述
在此图中,我们可以发现路径的规律

1.对于第一列和最后一列的数,它们只会受到上一行同列的数的影响
2.除此以外,剩下的数字都会受到它上一行同列和前一列数字的影响
下附代码

代码

/**
 * 本题考察点:线性dp 
 * 本人思路:手推状态转移方程 ,共r行,则有(r/2)*(ar+a1)个数 
 *     step1:f[i][j]表示到第i行第j个数的最长距离 
 *     step2:f[i][j] = max(f[i-1][j-1],f[i-1][j+1])+a[i][j] 
 *     step3:在i==r时输出最大值 
 *     画图得到的规律:1.第一列的数,只受上一行这一列的数的影响
 					   2.每行最后一列的数 , 只受上一行前一列的书的影响;
					   3.除上述的两种情况外,其余数字受到上一行前一列和这一列的数字的影响 
 
 
 * 时间复杂度:(r*r)/2==5e5
 * 空间复杂度:M即为数字的最多的个数(r=1000) 
 */
#include <bits/stdc++.h>
using namespace std;
const int N = 1e3+9;
const int M = 500510; 
int f[N][1010];
int r;
int a[N][1010];
int main() {
	cin>>r;
	for(int i = 1 ; i <= r ; i++){
		for(int j = 1;j<=i;j++){
			cin>>a[i][j];
		}
	} 
	
	for(int i = 1 ; i <= r ; i++){
		for(int j = 1 ; j <= r ; j++){
			if(j==1){
				f[i][j] = f[i-1][j] + a[i][j];
			}else if(j==i){
				f[i][j] = f[i-1][j-1] + a[i][j];
			}else{
				f[i][j] = max(f[i-1][j-1],f[i-1][j])+a[i][j];
			}
		}
	}
	int ans = 0;
	for(int j = 1 ; j <= r ; j++){
		ans = max(ans , f[r][j]);
	}
	cout<<ans;
    return 0;
}

/**
 * 至少5个不同类型的样例
 * 样例1:小型 
 2
 7
 1 1
 * 样例2:全部同样	 
 5
 7
 7 7
 7 7 7
 7 7 7 7
 7 7 7 7 7
 * 样例3:全部斜着 
 10
 1
 1 2
 1 2 3
 1 2 3 4
 1 2 3 4 5
 1 2 3 4 5 6
 1 2 3 4 5 6 7
 1 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8 9
 1 2 3 4 5 6 7 8 9 10
 * 样例4:全部直走
 10
 1000 
 1000 2
 1000 2 3
 1000 2 3 4
 1000 2 3 4 5
 1000 2 3 4 5 6
 1000 2 3 4 5 6 7
 1000 2 3 4 5 6 7 8
 1000 2 3 4 5 6 7 8 9
 1000 2 3 4 5 6 7 8 9 10 
 
 * 样例5:有直有斜 
 6
 10
 1 10
 1 10 1
 1 1 10 1
 1 1 1 1 10
 1 1 1 10 1 1
 1 1 1 1 10 1 1
 
 * 
 */


标签:数字,int,路径,样例,一行,一列,三角形,动态
From: https://blog.csdn.net/SparkleBear/article/details/141939971

相关文章

  • 实验:VMware上 Windows 数字证书制作与HTTPS部署
    大家吼啊,这篇文章才是真正意义上今天写的,前两篇算是库存了哈哈哈这个实验分为证书的签发和网站的部署两大部分。包含了网络基础设施的配置、DNS服务的安装配置、IIS服务的安装和配置,WEB搭建以及AD证书服务(ADCS)的安装和配置。由于涉及的部分比较多,所以看着内容和步骤会有......
  • 新一代客户数字化运营平台,助力品牌企业推进客户成功!
    在快速消费品(FMCG)领域,渠道客户作为品牌市场策略的重要合作伙伴,其忠诚度、协同度、响应度及运营状况对于品牌商的生意增长发挥着关键作用。然而,随着新兴市场和新品牌的不断涌现,传统快消品企业面临着前所未有的业务增长挑战。品牌企业与渠道客户之间需要建立更为紧密的合作伙伴关系,共......
  • C++入门基础知识50——【关于C++数字】之C++ 数学运算
    成长路上不孤单......
  • LeetCode 3174. 清除数字(字符串、模拟)
    题目:3174.清除数字思路:用字符串t模拟操作要求,当x是数字时,删除t的最后一个字符。不是的话,直接插入xclassSolution{public:stringclearDigits(strings){stringt="";for(autox:s){if('0'<=x&&x<='9'){......
  • 动态规划:不同二叉搜索树
    前言        动态规划在树的应用中是一种非常重要的算法技术,主要用于解决树结构上的优化问题。树形动态规划(TreeDynamicProgramming,简称树形DP)通常涉及在树结构上进行状态转移,以求解最优值问题。以下是对树形动态规划的详细解释和应用场景的总结:**基本概念**: ......
  • AI数字实时互动新探索,打造高拟真专属AI智能体
    我们打造了一款满足想象与应用的智能体——AI实时互动。   谈谈AI智能体   当AI变得足够聪明时,用户与AI的交互将变得真实自然。于是,构建高拟真AI与用户的实时交互,已经成为企业提升数智化生产力的新思路。在这个交互过程中,存在一个极具活力的对象,就是智能体(AIAge......
  • 马来西亚参访团走进数字人企业世优科技,共鉴元宇宙数字创新成果
    在数字化转型的浪潮中,全球企业正加速拥抱创新技术,以期在激烈的市场竞争中占据先机。9月4日,马来西亚CCG集团、马来西亚TOPWORK公司、马来西亚一带一路总商会的嘉宾们齐聚一堂,共同参访了总部位于中国北京的世优科技公司,体验了公司在数字技术领域的最新研发成果。“你眼中的马来西亚是......
  • 软件开发教学:基于数字药店系统源码的医保购药APP开发策略
    本篇文章,小编将详细探讨基于数字药店系统源码的医保购药APP开发策略,并提出一些开发中的关键技术要点。 一、数字药店系统源码的功能概述数字药店系统源码是构建在线药店的基础,它集成了药品信息管理、订单处理、支付系统、用户管理等核心模块,旨在实现药品销售的全流程数字化。一个......
  • 从源码到应用:数字药店系统与医保购药APP的开发实践
    本篇文章,我们将深入探讨数字药店系统的开发过程,并介绍医保购药APP如何通过源码设计实现从基础功能到完整应用的转化。 一、数字药店系统概述数字药店系统是一种基于互联网技术开发的在线药品销售与管理平台,通常包括药品展示、在线购买、订单管理、物流追踪等功能。与传统药店不同,......
  • Python如何对列表内的数字求和?
    Python列表是一种有序、可变的数据结构,可以包含不同类型的数据,如数字、字符串等。而在Python中,将列表中的数据求和是一个常见操作,那么如何对Python列表中的数字进行求和?我们通过这篇文章来介绍一下方法。Python中有几种方法可以对列表内的数字求和:1、使用内置函数......