数字三角形、数塔问题(DP)
由上图可以看出,贪心算法似乎解决不了这个问题。我们如果使用动态规划
我们可以定义三个数组data,distance,direction
分别存放数据以及每一层要走的权重,还有就是方向。
这个题最大的权重和是59.
我们首先可以从下往上找,会容易一些,因为矩阵呈三角形状态,我们们的元素要走的方向即为右下和正下,我们通过比较该元素正下和右下的大小来选取每一层需要走的元素,最底层不用管,从倒数第二层开始推。
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int data[50][50]; //数塔元素数组
int distance1[50][50]; //记录每一次每一层的大小数组
int direction[50][50]; //记录每次移动的方向0代表向下走,1表示向右下方走 int main()
{int i,j,n;cout<<"请输入数塔元素的行数:"<<endl;cin>>n;for(i = 1;i<=n;i++){for(j = 1;j<=i;j++){cin>>data[i][j]; //输入数塔元素的值distance1[i][j] = data[i][j];direction[i][j] = 0; //初始化方向向下走 }}for(i = n-1;i>=1;i--){for(j = 1;j<=i;j++){if(distance1[i+1][j] > distance1[i+1][j+1]){distance1[i][j] = distance1[i][j] + distance1[i+1][j];direction[i][j] = 0;}else{distance1[i][j] = distance1[i][j] + distance1[i+1][j+1];direction[i][j] = 1;}}} cout<<"max distance:"<<distance1[1][1]<<endl;j = 1;cout<<"路线:";for(i = 1;i<=n-1;i++){cout<<data[i][j]<<"->";j = j + direction[i][j];}cout<<data[n][j]<<endl;return 0;
}
结果:
有时候DP会解决一些贪心所解决不了的问题
数字三角形、数塔问题(DP)相关推荐
- 数字三角形 数塔问题
求路径最大的值,先将正三角形 先转换成直角三角形 好进行坐标排序 将第一个数设(1,1) 那么就是周围是0: dp[i][j]=max(dp[i-1][j-1],dp[i-1][j]+num[i][j ...
- HDU2084 数塔【DP】
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- hdu 2084 数塔(DP)
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU-2084 数塔 经典dp,水
1.HDU-2084 数塔 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 3.总结:从下往上推,最后归于顶点.方程为 dp[i][j] ...
- hdu1176 免费馅饼 ( 数塔(DP))
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 刘书dp学习笔记(1) 数字三角形与DAG上dp(上)
我之前没怎么看过刘书,然后前几天看了一下dp,感觉dp观被刷新了- 终于明白为什么说刘书是神书了! 用[]括住的是在下的一些浅见与笔记. 顺便一提,在下不保证代码是能过评测的,因为只试了其中几个数据. ...
- Bailian2760 数字三角形【DP】
2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...
- 数字三角形问题(数塔问题)
数字三角形问题(数塔问题) Description 下图给出了一个数字三角形,请编写一个程序,计算从顶至底的某处的一条路径,使该路径所经过的数字和最大 Input 有很多个测试案例,对于每一个测试案例 ...
- codevs——1220 数字三角形(棋盘DP)
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一 ...
- LQ0072 数字三角形【DP】
题目来源:蓝桥杯2020初赛 C++ C组I题 题目描述 上图给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径. 对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和 ...
最新文章
- oracle 修改默认日期格式_查看MySQL查询计划的方法和格式
- 感动哭!Starbreeze发布《收获日2》VR版
- 【Python-ML】神经网络激励函数-Softmax
- Zynq定时器系统(上)—全局和私有定时器
- Vue 中的 v-if 和 v-show 修饰符
- 数学和物理太难?这些动图让你秒懂抽象概念
- hihoCoder #1143 : 骨牌覆盖问题·一
- python 基于机器学习识别验证码
- 视觉检测无脊椎机器人或vipir_深入浅出人工智能前沿技术—机器视觉检测,看清人类智慧工业...
- python random_Python random() 函数
- Java基础知识之循环语句(for循环、while循环)
- 串口发送接收浮点型数据
- 中国内镜下血管采集市场趋势报告、技术动态创新及市场预测
- ansible执行拷贝/脚本/任务计划/yum/service
- 论文赏析[NAACL19]一个更好更快更强的序列标注成分句法分析器
- jquery程序 windows移植到linux显示不了,Windows10 + WSL 使用Linux图形界面程序
- ios opencv图片处理_iOS_OpenCV图片轮廓检测
- mybatisPlus代码自动生成
- 什么是javaEE、什么是JavaSE、什么是javaME?
- 关于一个正弦波程序表格生成器