动态规划解决数字塔-数字三角形问题
来源:互联网 发布:宁波软件外包 编辑:程序博客网 时间:2024/06/06 04:59
给定一个由N行数字组成的数字三角形,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大,以及路径。
#include<stdio.h>#define N 5int main() { int A[N][N],B[N][N]= {0},C[N][N]= {0},D[N]; //B存放数据,C存放状态,D存放路径 int i,j; int M,k; //输入数据 for(i = 0; i<N; i++) { for(j = 0; j<=i; j++) scanf("%d",&A[i][j]); } //数字塔数据处理 B[0][0]=A[0][0]; C[0][0]=0; for(i = 1; i<N; i++) { B[i][0] = B[i-1][0]+A[i][0]; C[i][0] = 1; } for(i = 1; i<N; i++) { B[i][i] = B[i-1][i-1]+A[i][i]; C[i][i] = 0; } for(i = 2; i<N; i++) { for(j = 1; j<i; j++) { if(B[i-1][j-1]>B[i-1][j]) { B[i][j] = B[i-1][j-1]+A[i][j]; C[i][j] =0; } else { B[i][j] = B[i-1][j]+A[i][j]; C[i][j] = 1; } } } //输出 数据表 和 状态表 printf("B表的结果:\n"); for(i = 0; i<N; i++) { for(j = 0; j<=i; j++) printf("%d\t",B[i][j]); printf("\n"); } printf("C表的结果:\n"); for(i = 0; i<N; i++) { for(j = 0; j<=i; j++) printf("%d\t",C[i][j]); printf("\n"); } //找出最大值 M = B[N-1][0]; for(j = 1; j<N; j++) { if(B[N-1][j]>M) { M = B[N-1][j]; k = j; } } printf("最大的数是:%d,下标是%d,%d\n",M,N-1,k); //根据状态表C,找路径 D[N-1] = A[N-1][k]; for(i=N-1; i>0;) { if(C[i][k]==0) { i--; //对角线 D[i] = A[i][--k]; } else { i--; D[i] = A[i][k]; } } //打印路径 printf("D的结果:\n"); for(i = 0; i<N; i++) printf("%d\t",D[i]); return 0;}
阅读全文
0 0
- 动态规划解决数字塔-数字三角形问题
- 【动态规划】数字三角形问题
- 动态规划:数字三角形问题
- 动态规划数字三角形问题
- 数字三角形问题[动态规划]
- 动态规划----数字三角形
- 数字三角形 动态规划
- 动态规划:数字三角形
- 动态规划--数字三角形
- 动态规划--数字三角形
- 动态规划-数字三角形
- 数字三角形--动态规划
- 动态规划&数字三角形
- 动态规划 数字三角形
- 动态规划 数字三角形
- 动态规划:数字三角形
- 动态规划 数字三角形
- 动态规划-数字三角形
- 超链接A标签嵌套解决方案
- Tensorflow Device 和 DeviceContext
- [RK3288][Android6.0] Audio中的录音重采样小结
- XTTS 简介
- java多线程---读写锁的应用
- 动态规划解决数字塔-数字三角形问题
- 《lua程序设计》读书笔记 第七章:迭代器与泛型for
- MySQL 乐观锁与悲观锁
- JSP 使用smartupload上传文件,JSP+servlet
- 程序员常用远程工具有哪些?
- httpparse linux 截包工具
- Object类中的wait()方法和notify()方法
- git 指令易忘记部分
- 镜像图片文件制作