Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数字三角形问题

数字三角形问题

作者头像
刘开心_1266679
发布于 2019-02-14 07:34:41
发布于 2019-02-14 07:34:41
82300
代码可运行
举报
运行总次数:0
代码可运行

Description

7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1) Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right.

Input

Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle, all integers, are between 0 and 99.

Output

Your program is to write to standard output. The highest sum is written as an integer.

Sample Input

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
5
7
3 8
8 1 0 
2 7 4 4
4 5 2 6 5

Sample Output

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
30

解题思路:
    将原题数据如下编码:
    7113218228311320332417424434444515522536545551、把当前(i,j)看成一个状态
    2、定义状态的指标函数dp(i,j)为从(i,j)出发时能得到的最大和(包括dp(i,j)本身的值)。
       (1)从(i,j)出发有2种决策,即向左,向右,如果向左走,需要先知道(i+1,j)出发后的最大和,即dp(i+1,j),如果向右走,需要先知道(i+1,j+1)出发后的最
       大和,状态转移方程为:dp(i,j)=dp(i,j)+max(dp(i+1,j),dp(i+1,j+1))
       (2)原问题即可抽象为填下面格子的问题 (绿色为已知数,依次填充与其平行的每一行)
                                       (55
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
54)(44
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
53)(43)(33)
               (52)(42)(32)(22)
       (51)(41)(31)(21)(11

3、原问题的解即为dp(1,1)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; 

int dp[105][105];

int main()
{
	int N, i, j;
	scanf("%d", &N);
	memset(dp, 0, sizeof(dp));
	for(i = 1; i <= N; i++)
	{
		for(j = 1; j <= i; j++)
		{
			scanf("%d", &dp[i][j]);
		}
	}
	for(i = N - 1; i >= 1; i--)
	{
		for(j = 1; j <= i; j++)
		{
			dp[i][j] = dp[i][j] + max(dp[i + 1][j],dp[i + 1][j + 1]);
		}
	}
	printf("%d\n", dp[1][1]);
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年03月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
DP专题 | 数字三角形 - POJ 1163
从本篇开始,准备做一系列的专题讲解,主要参考《算法竞赛入门经典》、《算法竞赛进阶指南》两本书。主要是为了能够更加系统的讲解各个知识点,这两本书已经讲得很好了,建议准备ACM学习以及想深入学习算法的同学购买。
ACM算法日常
2019/05/31
3400
POJ 1163 The Triangle【dp+杨辉三角加强版(递归)】
The Triangle Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 49955 Accepted: 30177 Description 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1) Figure 1 shows a number triangle. Write a program that calculates the hi
Angel_Kitty
2018/04/09
4800
AcWing 1360. 有序分数(每日一题)
给定一个整数 N,请你求出所有分母小于或等于 N,大小在 [0,1] 范围内的最简分数,并按从小到大顺序依次输出。
摆烂小白敲代码
2024/09/23
710
AcWing 1360. 有序分数(每日一题)
120. 三角形最小路径和
给定一个三角形 triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。 示例 1: 输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]] 输出:11 解释:如下面简图所示: 2 3 4 6 5 7 4 1 8 3
编程张无忌
2021/06/29
2390
超超超超级详细的多边形游戏问题分析(动态规划)
m(4,2,1) = max{m(4,1,1)*m(5,1,1), m(4,1,1)*m(5,1,0), m(4,1,0)*m(5,1,1), m(4,1,0)*m(5,1,0)} = -100
ruochen
2021/05/14
9620
超超超超级详细的多边形游戏问题分析(动态规划)
冒泡排序
冒泡排序在一组需要排序的数组中,对两两数据顺序与要求顺序相反时,交换数据,使大的数据往后移,每趟排序将最大的数放在最后的位置上,数据的变化像冒泡一样往上升的。
用户4645519
2022/05/09
5820
iOS Swift 判断手机机型 已更新 至iPhone12
/// 扩展UIDevice extension UIDevice { /// 获取设备具体详细的型号 var modelName: String { var systemInfo = utsname() uname(&systemInfo) let machineMirror = Mirror(reflecting: systemInfo.machine) let identifi
菜菜不吃蔡
2020/10/29
2.7K0
POJ 1163(数字三角形)
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
AI那点小事
2020/04/20
3200
面试逻辑题_经典的20道逻辑题
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/166817.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/16
9050
iOS 基本设备信息查询
开发中总会遇到很多需要查询设备及App信息的情况,有时候也是为了更好的用户体验或者为了bug跟踪,可能会需要获取用户的应用信息、系统信息、设备信息。这些信息的获取可以根据不同的设备或者App、系统版本来提供不同的功能或更好的用户体验,或者让开发者能更好的分析用户的问题原因。 (一)设备及App信息查询 1.获取设备名称 OC代码 NSString *deviceName = [[UIDevice currentDevice] name]; Swift代码 let deviceName = UIDevic
用户2554571
2018/07/19
1.2K0
【未完成】7-7 迷宫寻路 (30 分)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
韩旭051
2019/11/08
1.1K0
IOS Devices Version
游戏项目中有一个专门用于收集IOS崩溃的接口和查询页,运营/测试的同事有时候会通过查询页大概看一下每日崩溃的情况,经常会问iPhone6,1是什么,iPhone7,1又是什么设备?
meteoric
2018/11/19
7070
poj-1163-The Triangle
Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right.
瑾诺学长
2018/09/21
4460
数字三角形
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。
GeekLiHua
2025/01/21
520
数字三角形
LeetCode 1222. 可以攻击国王的皇后(set)
「黑皇后」在棋盘上的位置分布用整数坐标数组 queens 表示,「白国王」的坐标用数组 king 表示。
Michael阿明
2020/07/13
3640
LeetCode 1222. 可以攻击国王的皇后(set)
【POJ 3176】Cow Bowling(DP)
The cows don't use actual bowling balls when they go bowling. They each take a number (in the range 0..99), though, and line up in a standard bowling-pin-like triangle like this:
饶文津
2020/05/31
4560
Latex论文表格画法
\begin{table}[htbp] 表示表格的开始。中括号中的 htbp 表示的是表格的浮动格式。当然这个基本参数不仅仅只是对表格有用。需要注意的是,一般使用 [htb] 这样的组合,这样组合的意思就是Latex会尽量满足排在前面的浮动格式,就是 h-t-b 这个顺序,让排版的效果尽量好。         [h] 表示将表格放在当前位置。         [t] 表示将表格放置在页面的顶部。         [b] 表示将表格放置在页面的底部。         [p] 将表格放置在一只允许有浮动对象的页面上。     \caption{my table} 表示表格的标题,该设置可以放在 \begin{tabular} \end{tabular} 环境的前后,使得表格的标题显示在表格的上面或下面。\label{table1} 表示表格名字,用于正文中引用表格。     若要插入跨栏图表, 可以用浮动环境 table* 。\begin{table}[htbp] 变成 \begin{table*}[htbp] ,\end{table} 变成 \end{table*} 。     \begin{tabular}[位置]{列} 和 \begin{tabular*}{宽度}[位置]{列} 设置表格环境参数格式。         \begin{tabular}{|c|c|c|} 。一个 c 表示有一列,格式为居中显示,这是列必选参数。通过添加 | 来表示是否需要绘制竖线。|| 表示画二条紧相邻的竖直线。             l 表示该列左对齐。             c 表示该列居中对齐。             r 表示该列右对齐。         如果只需要某几列的宽度发生改变,可以使用 p{宽度} (以 cm 为单位或以 pt 为单位或 0.2\textwidth)来代替 c 参数,但是表格中的文字是默认左对齐的。因此此时可以添加 p{宽度}<{\centering} 来改变文本对齐方式,但此时需要添加包 \usepackage{array} 。在这里 \centering 参数可以被 \raggedleft 和 \raggedright 替换,分别表示为左对齐和右对齐。         也可以使用 tabular* (\begin{tabular*}{宽度}[位置]{列})环境参数,如上的 {宽度} 可以设置为 {10cm},表示整个表格的宽度为 10cm。但由于设置了表格的整体宽度,为了使表格对齐,需要使用表达式 @{\extracolsep{\fill}} ,但画正式表格一般 不推荐 使用这种表格方式(比较复杂,感觉一般用于画类似三线表格的图表中),可以通过命令调整整个表格的缩放。         \begin{tabular}[位置]{cc}。[位置] 中的参数是位置可选参数,该参数表示表格相对于外部文本行基线的位置,又称为垂直定位参数。一般为默认不设置,表示表格按照外部文本行的基线垂直居中。t表示表格顶部与当前外部文本行的基线重合。b 表示表格底部与当前外部文本行的基线重合。     可用 \setlength{\tabcolsep}{1pt} 来调整表格的列间距离 (十分推荐) 。     可用 \renewcommand\arraystretch{1.5} 来调整表格行间距,意思是将每一行的高度变为原来的1.5倍 (十分推荐) 。     如果表格太大,可以使用 \scalebox{1.5} 来对表格进行缩放,意思是将表格的大小变为原来的1.5倍 (十分推荐),使用的时候需要添加包 \usepackage{graphicx} 。
狼啸风云
2020/05/29
11K0
iOS-判断设备型号(判断iPhoneX)
原文链接:https://stackoverflow.com/questions/26028918/how-to-determine-the-current-iphone-device-model/26962452#26962452 下面是我整理过后写成的扩展,可直接Ctrl+C、Ctrl+V使用 import UIKit public enum DeviceType: Int { case simulator case appleTV case appleTV4K ca
用户2215591
2018/06/29
2.3K0
《剑指offer》第27天:三角形最小路径和
首先我们分析题目,要找的是三角形最小路径和, 这是个啥意思呢?假设我们有一个三角形:
程序员小浩
2020/09/14
4070
01背包(dp)
一种是递归的思想,从后向前考虑,背包决定是否放一个物品是根据两个值的大小判断(一个值是背包没有放入这个物品的价值,另一个值是背包放入这个物品,另外背包容量减少物品重量的价值),去两个值中的最大值,递归结束条件是物品放完或者是背包容量小于等于0。
红目香薰
2022/11/29
3340
01背包(dp)
相关推荐
DP专题 | 数字三角形 - POJ 1163
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验