题目描述

观察下面的数字金字塔。

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

        7 3   8 8   1   0 2   7   4   4
4   5   2   6   5 

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

输入格式

第一个行一个正整数 r ,表示行的数目。

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

输出格式

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

输入输出样例

输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5 
输出 30
说明/提示
【数据范围】
对于 100\%100% 的数据,1\le r \le 10001≤r≤1000,所有输入在 [0,100][0,100] 范围内。题目翻译来自NOCOW。USACO Training Section 1.5IOI1994 Day1T1

这题也是经典的动态规划问题

动态规划的四个步骤

第一步确定状态

设一个dp数组表示走到第i行j列时路径之和最大

第二步状态转移方程

再来看看这个样例

        7 3   8 8   1   0 2   7   4   4
4   5   2   6   5 

7 3 8 2 4为行,7 8 0 4 5是列

i表示行 ,j表示列

我们假设走到第三行第二列数字为7的地方我们可以枚举出到达这个地方的所有路径

可以得到一个规律,那就是这个7肯定是由7上面的8和1走过来的,所以我们就可以通过这个确定状态转移方程。

取由从8->7或者1->7之间最大值即可 8的行号和列号是7的行号和列号分别减一也即是

i-1,j-1。1可以表示为i-1,j。所以我们可以写出状态转移方程

a数组是数字三角形a[i][j]表示第i行第j列中的数值

dp[i,j]=max(dp[i-1,j-1]+a[i][j],dp[i-1,j]+a[i][j])

第三步初始化dp数组

因为测试样例中有负数的原因,所以我们要将dp数组初始化为负无穷

也要考虑边界情况如果刚好到达边界的话那只可能从i-1,j-1中到达i,j如果是从i-1,j中到达i,j的话就会越界访问因为i-1,j并没有值所以我们就要在数字三角形中每一行多初始化一个

 for (int i = 0; i <= n; i++){for (int j = 0; j <= i + 1; j++){dp[i][j] = -99999;}}

所有的路径必定经过1,1所有我们手动将1,1输入

dp[1][1] = a[1][1];

第四步确定遍历顺序,这里是从前向后推到的所以我们也是从前往后计算

完整代码

#include<stdio.h>
#define N 1100
int dp[N][N];//表示的是走到当前位置的路径最大
int a[N][N];//数字三角形
int n;//行
int max(int a, int b)//求最大值
{return a > b ? a : b;
}
int main()
{scanf("%d", &n);for (int i = 1; i <= n; i++) //数字三角形的输入{for (int j = 1; j <= i; j++){scanf("%d", &a[i][j]);}}for (int i = 0; i <= n; i++)//初始化dp数组{for (int j = 0; j <= i + 1; j++){dp[i][j] = -99999; //初始化为负无穷}}dp[1][1] = a[1][1];  //手动初始化1,1for (int i = 2; i <= n; i++)  //因为第一行第一列是必定经过的点已经在上面初始化过了所以我们直接从2开始遍历{for (int j = 1; j <= i; j++){dp[i][j] = max(dp[i - 1][j - 1] + a[i][j], dp[i - 1][j] + a[i][j]);}}int res = -99999;for (int i = 1; i <= n; i++)  //然后还要找出dp数组中最后一行的最大值就是我们需要的答案res = max(res, dp[n][i]);printf("%d", res);return 0;
}

P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles相关推荐

  1. P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles(记忆化搜索)--- 89分

    [USACO1.5][IOI1994]数字三角形 Number Triangles - 洛谷 /* P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles(记忆 ...

  2. 洛谷P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles

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

  3. 数字三角形 Number Triangles

    [USACO1.5][IOI1994]数字三角形 Number Triangles 题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以 ...

  4. P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles(简单dp)

    https://www.luogu.org/problemnew/show/P1216 题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步 ...

  5. luogu P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles (递推)

    链接:https://www.luogu.org/problemnew/show/P1216 题面: 题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的 ...

  6. [USACO1.5]数字三角形 Number Triangles

    https://www.luogu.org/problemnew/show/P1216 题解: /* *@Author: STZG *@Language: C++ */ #include <bi ...

  7. java 数字三角形_数字三角形 Number Triangles(java的MLE解决办法)

    于是在网上找相应的解决办法,如何对java的内存进行优化 于是使用了里面的IO读取加速的模板,套用了一下,就过了... import java.io.BufferedReader; import ja ...

  8. [USACO1.5]数字金字塔 Number Triangles

    题意 从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 分析 从最低层开始走. var n,i,j:longint; f,a:array[0..2 ...

  9. C++数字三角形问题(动态规划)

    一.问题描述 ★问题描述:给字一个由n行数字组成的数字三角形(等腰三角形).试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. ★算法设计:对于给定的由n行数字组成的数字三 ...

最新文章

  1. C++ 互斥锁和条件变量实现读写锁
  2. 【数理知识】辛矩阵 symplectic
  3. 轻松玩转jquery。
  4. 【HDU - 1533】Going Home(网络流,二分图最优匹配,KM算法)
  5. Cortex-M3存储器系统
  6. 【MySQL】MySQL 8报错 Unknown initial character set index 255 received from server. Initial client char
  7. 量化中需留意的坑之一
  8. oracle查询不等于1000,解决oracle查询时 in 大于1000的办法
  9. 不用任何插件:小白如何白嫖百度网盘下载速度(不好用来打我,嘿嘿)
  10. c++STL库最详细介绍(保姆级教学)
  11. 通过 Docker 化一个博客网站来开启我们的 Docker 之旅
  12. 获取java可用时区列表ZoneId
  13. 虚幻4和Unity3D应该学哪个
  14. 【笔记】excel预加载word引用
  15. 前端开发:Vue报错Avoid mutating a prop directly since the value will be…的解决方法
  16. 【完美解决】爬虫伪装代理IP方案
  17. 知识图谱辅助的个性化推荐系统
  18. Hive的JavaAPI操作
  19. Aaron Swartz:如何提高效率
  20. 2019最新某图灵系列丛书(交互设计、编程、大数据、人工智能等)

热门文章

  1. 【文献阅读】Probabilistic Terrain Mapping for Mobile Robots With Uncertain Localization
  2. 实训五:交换机配置文件备份
  3. 分布式深度神经网络(DDNN)
  4. elementui table 表格固定列最后一行显示不全
  5. 聊一聊火爆的DevOps到底是什么
  6. NIFTI matlab下载使用
  7. Java小农养成记第二十天
  8. 夜天之书 #62 诱导转向的伪开源战略
  9. 请求各位大神 只有微信头像和昵称怎么查到微信号
  10. 关于 百度飞浆paddleOCR编译32位版本 的解决方案