数字三角形路径最小值c语言题目,算法学习——动态规划之点数值三角形的最小路径...
算法描述在一个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.2.贪心的局限性 1.1.3.贪心失效后怎么办 1.1.4.从最优化问题到递归 1.2. ...
- 【C语言】算法学习·回溯算法
目录 一.全排列问题 二.N 皇后问题 三.最后总结 回溯算法基本框架 解决一个回溯问题,实际上就是一个决策树的遍历过程.你只需要思考 3 个问题: 1.路径:也就是已经做出的选择. 2.选择列表:也 ...
- C语言题目:求具有下列两个性质的最小自然数n
题目:求具有下列两个性质的最小自然数n: (1)n的个位数是6: (2)若将n的个位数移到其余各位数字之前,所得的新数是n的4倍. #include<stdio.h> #include&l ...
- 分支限界算法c语言_算法学习计划
学习计划 根据王红梅编著的<算法设计与分析>,读取每一章的内容,然后从乐扣上找对应的算法题,包含简单-中等-困难三种程度.尽量每两周能够完成一章.遇到一种类型的问题时,先自己想想解决方案, ...
- 算法学习--动态规划与贪心算法
动态规划与贪心算法都是一种递推算法,都是用局部最优解来推导全局最优解:是对遍历解空间的一种优化:当问题具有最优子结构时,可以用动态规划来解决,而贪心算法是动态规划的特例 动态规划 1. 动态规划的思想 ...
- 【算法学习】求得一定数值范围内的所有质数
14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...
- 【C语言】算法学习·逆波兰式
目录 逆波兰式 算法定义 算法作用 算法实现 计算方法 算法举例 算法图示 程序实现 二叉树法 逆波兰式 算法定义 一个表达式E的后缀形式可以如下定义: (1)如果E是一个变量或常量,则E的后缀式是E ...
- c语言dp算法,C++动态规划dp算法题
问题1:找硬币,换钱的方法 输入: penny数组代表所有货币的面值,正数不重复 aim小于等于1000,代表要找的钱 输出: 换钱的方法总数 解法1:经典dp,空间复杂度O(n*aim) class ...
- 【C语言】算法学习·种类并查集
一般的并查集,维护的是具有连通性.传递性的关系,例如亲戚的亲戚是亲戚.但是,有时候,我们要维护另一种关系:敌人的敌人是朋友.种类并查集就是为了解决这个问题而诞生的. 我们先来看一个例题: 其实很容易想 ...
最新文章
- C# 中Excel导出,可以自由设置导出的excel格式
- http:(4):http请求方法
- 微信开发学习日记(一):快速阅读5本书,掌握整体背景
- [Contest]2017 ACM/ICPC Asia Regional Shenyang Online(01 03 07 09 10 11待补)
- 深入理解AQS(AbstractQueuedSynchronizer)与初识Lock
- Java反射异常处理之InvocationTargetException
- Ubuntu18.04 xrdp多用户远程桌面
- Python---基础-运算符int和range函数
- 《华为问题管理法》读书笔记2
- 图像识别利用计算机对图像进行,图像识别技术的应用与发展
- 东财《领导科学X》综合作业
- 消失点:Fast and Accurate Vanishing Point Detection in Complex Scenes
- 基于ChatGPT制作的一款英语口语练习应用SpokenAi
- 蓝桥杯2017 包子凑数
- 天池赛:宝可梦数据分析–龙系小精灵分享
- 七麦js破解(最新)
- 微信小程序优惠券列表领取(send-coupon插件)
- 104、基于51单片机智能风扇pwm调速红外遥控无线遥控风扇温控风扇系统设计
- 基于51单片机的四路抢答器仿真
- 腾讯云轻量级服务器Ubuntu系统搭建可视化界面
热门文章
- 抽奖 开源 html5,抽奖转盘.html · smilestone/awardRotate - Gitee.com
- ise怎么更改编辑器_Win7系统时间更改不了的解决方法
- 阳江市2021高考成绩查询一下,广东省阳江市2021年高级会计师考试结束后去哪查成绩?...
- 皮一皮:六神终于出奶茶了!
- 一种思路:策略模式 + 反射工厂,很好的实现了开闭原则
- 那些实用与颜值齐飞的桌面!
- 阿里云1C2G虚拟机【99/年】羊毛党集合啦!
- 服务器上装centos系统花屏,CentOS系统如何解决鼠标花屏的问题
- 循环更新数据库java_java – 无限循环数据库检查
- java poi 导出 国际化_更好用的excel国际化多语言导出