数字金字塔(动态规划 输出路径)
来源:互联网 发布:想学软件编程 编辑:程序博客网 时间:2024/05/21 10:25
【题目描述】
观察下面的数字金字塔。写一个程序查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以从当前点走到左下方的点也可以到达右下方的点。
在上面的样例中,从13到8到26到15到24的路径产生了最大的和86。
【输入】
第一个行包含R(1<= R<=1000),表示行的数目。
后面每行为这个数字金字塔特定行包含的整数。
所有的被供应的整数是非负的且不大于100。
【输出】
单独的一行,包含那个可能得到的最大的和。
【输入样例】
51311 812 7 266 14 15 812 7 13 24 11
【输出样例】
86
13->8->26->15->24
【来源】
#include<iostream>#include<cstring>#define MAXN 1000using namespace std;int a[MAXN+10][MAXN+10][4];//a[x][y][1]存储本身的数值;//a[x][y][2]存储最大值;//a[x][y][3]存储前进的方向,0往下,1往右 int main(){memset(a,0,sizeof(a));int n,x,y;cin>>n; for(int x=1;x<=n;x++) { for(int y=1;y<=x;y++) { cin>>a[x][y][1]; a[x][y][2]=a[x][y][1];//初始状态 a[x][y][3]=0; } } for(x=n-1;x>=1;x--) { for(y=1;y<=x;y++) { if(a[x+1][y][2]>a[x+1][y+1][2])//选择路径,保留最大路径值 { a[x][y][2]=a[x][y][1]+a[x+1][y][2]; a[x][y][3]=0; } else { a[x][y][2]=a[x][y][1]+a[x+1][y+1][2];a[x][y][3]=1; } } } cout<<a[1][1][2]<<endl; y=1; for(x=1;x<=n-1;x++)//输出最大值的路径 { cout<<a[x][y][1]<<"->"; y=y+a[x][y][3]; } cout<<a[x][y][1]<<endl;}
阅读全文
0 0
- 数字金字塔(动态规划 输出路径)
- 数字金字塔(动态规划)
- 数字金字塔(动态规划)
- 数字金字塔(动态规划)
- 数字金字塔(动态规划)
- Luogu P1216 数字金字塔+动态规划
- oj3134:动态规划——数字金字塔
- 挖地雷(动态规划 输出路径)
- 动态规划 输出路径 hrbust1813
- 【坐标型动态规划】Number Triangles数字金字塔(Usaco_Training 1.5)
- 输出数字金字塔代码
- 120输出数字金字塔
- hdu 1503:Advanced Fruits(动态规划+路径输出)
- poj1141 Brackets Sequence 动态规划 输出路径
- 城市交通网(动态规划,最短路径,输出最短路径)
- 输出数字金字塔(数字1-9)
- C++动态规划算法之数字金字塔【USACO TRAINING】:一道经典的数塔问题
- 数字三角形(动态规划)
- Android Studio无法查看SDK源码问题
- 尝试分解业务
- Python虚拟环境在离线断网环境下创建项目虚拟环境和安装依赖包
- Servlet笔记四
- 科大讯飞
- 数字金字塔(动态规划 输出路径)
- Android RecyclerView设置点击事件
- DroneKit教程(三):连接Pixhawk飞控
- 拓扑排序
- c++实现skipList
- 约瑟夫环
- MY SQL语句常用集合
- jstree动态创建节点
- 2017中国人工智能与大数据峰会早鸟票报名!