数塔问题
2016-04-23 20:22
489 查看
先贴出运行结果:
C++代码:
C++代码:
#include <iostream> #define N 50 using namespace std; //a[.][.][0]存储原始数据 //a[.][.][1]存储存储动态规划过程 //a[.][.][2]存储最优化路径 int main() { int a [3]; cout<<"please input the number of rows:"; int rnum; cin>>rnum; if (rnum<1) { cout<<"输入有误"<<endl; exit(1); } //初始化 for (int i=0;i<rnum;++i) { cout<<"please input the "<<i+1<<" row."<<endl; for (int j=0;j<=i;++j) { cin >> a[i][j][0]; a[i][j][1] = a[i][j][0]; a[i][j][2] = 0; } } for (int i=rnum-2;i>=0;--i) { for (int j=0;j<=i;++j) { if (a[i+1][j][1] > a[i+1][j+1][1]) { a[i][j][1] += a[i+1][j][1]; //加上左边的数 a[i][j][2] = 0; //左边的数大,向左走 } else { a[i][j][1] += a[i+1][j+1][1]; //加上右边的数 a[i][j][2] = 1; //右边的数大,向右走 } } } cout<< "a[i][j][0]存储原始数据如下:"<<endl; for (int i=0;i<rnum;++i) { for (int j=0;j<=i;++j) { cout<< a[i][j][0]<<' '; } cout<<endl; } cout<< "a[i][j][1]存储动态规划过程如下:"<<endl; for (int i=0;i<rnum;++i) { for (int j=0;j<=i;++j) { cout<< a[i][j][1]<<' '; } cout<<endl; } cout<< "a[i][j][2]存储最优解路径如下:"<<endl; for (int i=0;i<rnum;++i) { for (int j=0;j<=i;++j) { cout<< a[i][j][2]<<' '; } cout<<endl; } cout<<"max = "<<a[0][0][1]<<endl; int col = 0; cout<<"路径:"<<endl; for (int i=0;i<rnum-1;++i) { cout<<a[i][col][0]<<"->"; col += a[i][col][2]; } cout<<a[rnum-1][col][0]<<endl; return 0; } // 9 // 12 15 // 10 6 8 // 2 18 9 5 // 19 7 10 4 16
相关文章推荐
- JAVA中的Buffer
- c#语言-Split拆分
- 团队开发个人总结05
- 以中国电影市场托底的阿里影业,国际化算盘打的响
- HDU 5673 Robot(卡特兰数)
- Qt之图形(绘制文本)
- Qt之图形(绘制文本)
- vmware workstation 克隆后网卡eth0不能正常工作解决方案
- 只使用指向二叉树的根的一个指针T,计算T中节点的个数,T中树叶的片数,T中满节点的个数
- 个人冲刺02
- linux Shell编程
- java 基础题 时间换算
- Node.js Web模块
- 机房收费系统——项目开发计划书
- 第八周学习进度条
- EasyUI DateBox 按钮自定义添加功能
- jQuery对象与DOM对象的区别
- Node.js工具模块
- 浙大 PAT Advanced level 1008. Elevator
- Unity脚本执行顺序