当前位置:   article > 正文

动态规划 第1关:数塔问题_第1关:数塔问题

第1关:数塔问题

任务描述

本关任务:编写用动态规划解决数塔问题。

相关知识

为了完成本关任务,你需要掌握:动态规划。

编程要求

求上图从顶层到顶层的一个路径,使路径上的数字和最大。要求输出最大的数字和max和数值和最大的路径。

解题思路:

原始信息有层数和数塔中的数据,层数用一个整型变量n存储,数塔中的数据用二维数组data,存储成如下的下三角阵: 

  1. 9
  2. 12 15
  3. 10 6 8
  4. 2 18 9 5
  5. 19 7 10 4 16

测试输入:

  1. 5
  2. 9
  3. 12 15
  4. 10 6 8
  5. 2 18 9 5
  6. 19 7 10 4 16

输出示例:

  1. max=59
  2. 数值和最大的路径是:9->12->10->18->10
  1. #include <stdio.h>
  2. /********** Begin **********/
  3. #define MAX(a,b)((a) > (b) ? (a) : (b))//宏定义
  4. int main() {
  5. int a[50][50][4];
  6. a[1][1][1]=9;
  7. a[2][1][1]=12, a[2][2][1]=15;
  8. a[3][1][1]=10, a[3][2][1]=6, a[3][3][1]=8;
  9. a[4][1][1]=2, a[4][2][1]=18, a[4][3][1]=9, a[4][4][1]=5;
  10. a[5][1][1]=19, a[5][2][1]=7, a[5][3][1]=10, a[5][4][1]=4, a[5][5][1]=16;
  11. int dp[50][50];
  12. int i,j,num[50];
  13. int g,h,e;
  14. //把第5行数据放入dp[5][]中
  15. for(j=1;j<=5;j++) {
  16. dp[5][j] = a[5][j][1];
  17. }
  18. //使用动态规划寻找出最大路径和
  19. for(i=4;i>=1;i--) {
  20. for(j=1;j<=i+1;j++){
  21. dp[i][j] = MAX(dp[i+1][j],dp[i+1][j+1]) + a[i][j][1];
  22. }
  23. }
  24. //找出n-2前所有路径值
  25. num[4] = dp[4][1];
  26. for(i=4;i>=1;i--) {
  27. for(j=1;j<=i;j++) {
  28. num[i] = MAX(num[i],dp[i][j]);
  29. //找出n-1行经过路径的值
  30. if(dp[i][j] == 28) {
  31. // printf("i=%d\n",i);
  32. // printf("j=%d\n",j);
  33. g = i;
  34. h = j;
  35. // printf("%d\n",a[4][2][1]);
  36. // printf("%d\n",a[5][3][1]);
  37. }
  38. }
  39. }
  40. //找出n行经过路径的值
  41. for(j=1;j<=5;j++) {
  42. if(a[g][h][1] + a[5][j][1] == 28) {
  43. e = j;
  44. }
  45. }
  46. //输出最大路径和
  47. printf("max=%d\n",dp[1][1]);
  48. //遍历输出各行路径值
  49. printf("数值和最大的路径是:");
  50. for(i=1;i<=5;i++) {
  51. if(i <= 3) {
  52. printf("%d->",num[i]-num[i+1]);
  53. } else if(i==4) {
  54. num[4] = a[g][h][1];
  55. printf("%d->",num[i]);
  56. } else if(i==5) {
  57. num[5] = a[5][e][1];
  58. printf("%d\n",num[i]);
  59. }
  60. }
  61. return 0;
  62. }
  63. /********** End **********/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/538224
推荐阅读
相关标签
  

闽ICP备14008679号