数字三角形:顺推法(二维数组)
题意
写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。
分析
这题我是用顺推法来做的
按三角形的行划分阶段,若行数为 n,则可把问题看做一个n-1个阶段的决策问题。先求第2行各元素到起点的最大和,再依次求出第3,4,5,......,.n-1,n到起点的最大和,最后找第n行的最大值设f[i,j]为第i行第j列上点到起点的最大和,状态转移方程为:
则 f[1,1]=a[1,1];
f[i,1]=a[i,1]+f[i-1,1];
f[i,j]=max{a[i,j]+f[i-1,j-1],a[i,j]+f[i-1,j]} 2<=j<=i
max(f[n,1],f[n,2],.......,f[n,n]}即为所求。
var
n,i,j,maxsum:longint;
a,f:array[1..1000,1..1000]of longint;
begin
readln(n);
for i:=1 to n do
for j:=1 to i do
read(a[i,j]);
f[1,1]:=a[1,1];
for i:=2 to n do
begin
f[i,1]:=a[i,1]+f[i-1,1];
for j:=2 to i do
if f[i-1,j-1]>f[i-1,j] then f[i,j]:=a[i,j]+f[i-1,j-1] else
f[i,j]:=a[i,j]+f[i-1,j];
end;
maxsum:=0;
for i:=1 to n do
if f[n,i]>maxsum then maxsum:=f[n,i];
write(maxsum);
end.
转载于:https://www.cnblogs.com/YYC-0304/p/9500180.html
数字三角形:顺推法(二维数组)相关推荐
- 数字三角形:顺推法(一维数组)
题意 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 分析 f[j] 表示第i行第j个位置上的数到顶点的最大值. F[j]=ma ...
- c语言对用下标法二维数组遍历,二维数组遍历:下标法与指针法的较量
在图像的采集中,常常需要用到二维数组,这里数组的遍历是指按照一定的顺序访问数组中所有的元素. 在众多的遍历方法中,下标法和指针法是两种常用的方法.但在使用的时候,我们只需要选择其中的一种,那么如何选择 ...
- 【Java】 杨辉三角 二维数组打印杨辉三角
Tips 打印三角的操作 : 每行打印前预留空格 打印指定数量的星号后换行 重复循环打印直至完成所有打印结果 杨辉三角: 三角规律空格最大对称值为 5 大于 5 则会变形 三角规律为当前值为上一个值加 ...
- 二维数组作为参数,传入函数(最好用的)
二维数组作为参数,传入函数(最好用的) 很多时候我都是直接通过传入一个 固定的数字来传递一个二维数组, 比如这样子定义函数 int fun(int a[][3],int n) 调用函数是 fun(a, ...
- 《剑指offer》——04. 二维数组中的查找——暴力法、线性查找——java实现
文章目录 1.题目描述 2.解决方法 (1)暴力法 (2)线性查找(右上角->左下角) 参考: 1.题目描述 2.解决方法 (1)暴力法 如果不考虑二维数组排好序的特点,则直接遍历整个二维数组的 ...
- 《剑指offer》--二维数组中的查找、从头到尾打印链表、重建二叉树、旋转数组的最小数字
一.二维数值中的查找: 1.题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数 ...
- Java黑皮书课后题第8章:**8.19(模式识别:四个连续相等的数)编写下面的方法,测试一个二维数组是否有四个连续相等的数字(水平、垂直、对角线方向都可以)。编写一个测试程序,提示用户输入一个数组
**8.19(模式识别:四个连续相等的数)编写下面的方法,测试一个二维数组是否有四个连续相等的数字(水平.垂直.对角线方向都可以).编写一个测试程序,提示用户输入一个数组 题目 题目描述与运行实例 破 ...
- c#给定二维数组按升序排序_在数组中按升序对数字进行排序| 8086微处理器
c#给定二维数组按升序排序 Problem: Write a program in 8086 microprocessor to sort numbers in ascending order in ...
- C语言 杨氏矩阵,二维数组查找数字。
杨氏矩阵:有一个二维数组.,数组的每行从左到右是递增的,每列从上到下是递增的:在这样的数组中查找一个数字是否存在. #include<stdio.h> void my_resear(int ...
最新文章
- 读农民工兄弟学C#文章后的感觉
- 手把手教你分析MySQL死锁问题,十分钟看完文章下次轻松完成不加班
- 初始化列表的使用(十五)
- 吃亏是福--创业[3]
- iOS面试题总结 二
- Kubectl get pods 一直处于 Status:containerCreating
- 【CyberSecurityLearning 42】日志记录规则
- 【问链-Eos公开课】第四课 EOS 的钱包创建、导入私钥
- oracle 批量读,Oracle批量读取数据和批量绑定
- Eclipse用法和技巧十二:快速复制一行
- 基于事件的异步模式概述
- android 系统的切图方式_Android UI设计及切图
- 英特尔图形安装程序的linux,如何在我的系统中安装英特尔图形驱动程序?
- 2018二月安恒月赛WRITE UP
- 利用Pano2VR在全景图中添加视频,音频,图片
- CF1071C. Triple Flips
- 从技术走向管理——李元芳履职记
- 上市公司9月23日晚间公告速递
- steam邮箱登录教程
- 相关系数与决定系数的关系