算法描述在一个n行的点数值三角形中,寻找从顶点开始每一步可沿着左斜或者右斜向下直到到达底端,使得每个点上的数值之和为最小

右图为一个4行的点数值三角形

算法思路接收用户输入行数n

使用一个二维数组a[n+1][n+1]来存放各个点上的数值,数值可以由用户输入或者是随机生成

定义一个二维数组(用来存放方向)direction[n+1][n+1],存放1或0,1代表右,0代表左

定义一个二维数组b[n+1][n+1] 表示到底端的数值之和

以上图4行的点数值三角形为例

b[4][1]=47 b[4][2]=93

b[3][1]=43

这里b[3][1]是可以等于47,也可以等于93,但题目要求的是最小,所以这里取小的值

b[3][1]其实是由逆推得到的,具体看下面

b[n+1][n+1]的递推关系初始值

从最后一行开始

b[n][i]=a[n][i] i遍历完最后一行的所有元素

递推关系

b[n][i]=Math.min(b[n+1][i],b[n+1][i+1]) 取最小值

算法实现System.out.println("输入数字三角形的行数n:");

Scanner scanner = new  Scanner(System.in);    int n = scanner.nextInt();

scanner.close();    int[][] a= new int[n+1][n+1];    //随机赋值数字三角形

for(int i=1;i

a[i][j] = (int) (Math.random()*100);

}

}    //输出数字三角形

for(int i=1;i

System.out.print(a[i][j]+"    ");

}

System.out.println("");

}    int[][] b = new int[n+1][n+1];    int[][] direction = new int[n+1][n+1];//0是左,1是右

//最后一行的长度为其本身

for(int i=1;i

b[n][i] = a[n][i];

}    //关键逆推代码

for(int i=n-1;i>=1;i--){        for(int j=1;j<=i;j++){            if(b[i+1][j+1]

b[i][j]=a[i][j] + b[i+1][j+1];

direction[i][j]=1;//右边的数值较大,则记录方向为右

}else{

b[i][j]=a[i][j] + b[i+1][j];

direction[i][j]=0;//左边的数值较大,则记录方向为左

}

}

}

System.out.println("最小路径和为"+b[1][1]);    int flag = 1;    int j=1;    //循坏结束

while(flag!=n){

System.out.print(a[flag][j]);        if(direction[flag][j]==1){

System.out.print("->向右");

flag++;

j++;

}else{

System.out.print("->向左");

flag++;

}

}

System.out.print("->"+a[flag][j]);

}

结果

数字三角形路径最小值c语言题目,算法学习——动态规划之点数值三角形的最小路径...相关推荐

  1. 数据结构与算法学习⑥(动态规划 题解 背包和打家劫舍问题)

    数据结构与算法学习⑥(动态规划 动态规划 1.初识动态规划 1.1.从贪心说起 1.1.1.贪心的特点 1.1.2.贪心的局限性 1.1.3.贪心失效后怎么办 1.1.4.从最优化问题到递归 1.2. ...

  2. 【C语言】算法学习·回溯算法

    目录 一.全排列问题 二.N 皇后问题 三.最后总结 回溯算法基本框架 解决一个回溯问题,实际上就是一个决策树的遍历过程.你只需要思考 3 个问题: 1.路径:也就是已经做出的选择. 2.选择列表:也 ...

  3. C语言题目:求具有下列两个性质的最小自然数n

    题目:求具有下列两个性质的最小自然数n: (1)n的个位数是6: (2)若将n的个位数移到其余各位数字之前,所得的新数是n的4倍. #include<stdio.h> #include&l ...

  4. 分支限界算法c语言_算法学习计划

    学习计划 根据王红梅编著的<算法设计与分析>,读取每一章的内容,然后从乐扣上找对应的算法题,包含简单-中等-困难三种程度.尽量每两周能够完成一章.遇到一种类型的问题时,先自己想想解决方案, ...

  5. 算法学习--动态规划与贪心算法

    动态规划与贪心算法都是一种递推算法,都是用局部最优解来推导全局最优解:是对遍历解空间的一种优化:当问题具有最优子结构时,可以用动态规划来解决,而贪心算法是动态规划的特例 动态规划 1. 动态规划的思想 ...

  6. 【算法学习】求得一定数值范围内的所有质数

    14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...

  7. 【C语言】算法学习·逆波兰式

    目录 逆波兰式 算法定义 算法作用 算法实现 计算方法 算法举例 算法图示 程序实现 二叉树法 逆波兰式 算法定义 一个表达式E的后缀形式可以如下定义: (1)如果E是一个变量或常量,则E的后缀式是E ...

  8. c语言dp算法,C++动态规划dp算法题

    问题1:找硬币,换钱的方法 输入: penny数组代表所有货币的面值,正数不重复 aim小于等于1000,代表要找的钱 输出: 换钱的方法总数 解法1:经典dp,空间复杂度O(n*aim) class ...

  9. 【C语言】算法学习·种类并查集

    一般的并查集,维护的是具有连通性.传递性的关系,例如亲戚的亲戚是亲戚.但是,有时候,我们要维护另一种关系:敌人的敌人是朋友.种类并查集就是为了解决这个问题而诞生的. 我们先来看一个例题: 其实很容易想 ...

最新文章

  1. C# 中Excel导出,可以自由设置导出的excel格式
  2. http:(4):http请求方法
  3. 微信开发学习日记(一):快速阅读5本书,掌握整体背景
  4. [Contest]2017 ACM/ICPC Asia Regional Shenyang Online(01 03 07 09 10 11待补)
  5. 深入理解AQS(AbstractQueuedSynchronizer)与初识Lock
  6. Java反射异常处理之InvocationTargetException
  7. Ubuntu18.04 xrdp多用户远程桌面
  8. Python---基础-运算符int和range函数
  9. 《华为问题管理法》读书笔记2
  10. 图像识别利用计算机对图像进行,图像识别技术的应用与发展
  11. 东财《领导科学X》综合作业
  12. 消失点:Fast and Accurate Vanishing Point Detection in Complex Scenes
  13. 基于ChatGPT制作的一款英语口语练习应用SpokenAi
  14. 蓝桥杯2017 包子凑数
  15. 天池赛:宝可梦数据分析–龙系小精灵分享
  16. 七麦js破解(最新)
  17. 微信小程序优惠券列表领取(send-coupon插件)
  18. 104、基于51单片机智能风扇pwm调速红外遥控无线遥控风扇温控风扇系统设计
  19. 基于51单片机的四路抢答器仿真
  20. 腾讯云轻量级服务器Ubuntu系统搭建可视化界面

热门文章

  1. 抽奖 开源 html5,抽奖转盘.html · smilestone/awardRotate - Gitee.com
  2. ise怎么更改编辑器_Win7系统时间更改不了的解决方法
  3. 阳江市2021高考成绩查询一下,广东省阳江市2021年高级会计师考试结束后去哪查成绩?...
  4. 皮一皮:六神终于出奶茶了!
  5. 一种思路:策略模式 + 反射工厂,很好的实现了开闭原则
  6. 那些实用与颜值齐飞的桌面!
  7. 阿里云1C2G虚拟机【99/年】羊毛党集合啦!
  8. 服务器上装centos系统花屏,CentOS系统如何解决鼠标花屏的问题
  9. 循环更新数据库java_java – 无限循环数据库检查
  10. java poi 导出 国际化_更好用的excel国际化多语言导出