数据结构与算法——动态规划思想解题三角形问题
动态规划的基本思想
动态规划解题的时候将问题分解为几个不同的阶段(把原始问题分解为不同的子问题),自底向上计算。每次决策都依赖于当前的状态。我们可以将不同阶段的不同状态存储在一个二维数组中。
从这个二维数组中,可以查到到任何一个状态的最优结果。
例题
题目描述:
在一个N层高的金字塔上,以金字塔顶为第一层,第i层有i个落点,每个落点有若干枚金币,在落点可以跳向左斜向下或向右斜向下的落点。若知道金字塔的层数N及每层的金币数量分布,请计算小招在本次游戏中可以获得的最多金币数量。
输入描述:
输入共有N + 1行(N ≤ 1024),第一行为高度N,第二行至N + 1行 ,为该金字塔的金币数量分布。
输出描述:
输出金币数量。
示例:
代码实现
1、先把键盘输入组装成一个二维数组;
2、然后通过动态规划思想解题。
import java.util.Scanner;public class test {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int N = scan.nextInt();scan.nextLine();int[][] arr = new int[N][N];for (int i = 0; i < N; i++) {int j;for (j = 0; j <= i; j++) {arr[i][j] = scan.nextInt();}while (j <= N - 1) {arr[i][j] = 0;j++;}scan.nextLine();}maxSumNew(arr);}private static int maxSumNew(int[][] arr) {int n=arr.length;if (arr == null) {return 0;}for (int i = n - 1; i >= 0; i--) {for (int j = 0; j <= i; j++) {if (i == n - 1) {arr[n - 1][j] = arr[n - 1][j];} else {arr[i][j] = Math.max(arr[i + 1][j], arr[i + 1][j + 1]) + arr[i][j];}}}System.out.println(arr[0][0]);return arr[0][0];}
}
数据结构与算法——动态规划思想解题三角形问题相关推荐
- 数据结构与算法基本思想
目录 二分查找 八大排序 特点 冒泡排序 快速排序 直接插入排序 折半插入排序 希尔排序 简单选择排序 堆排序 二路归并排序 基数排序 二叉查找树(二叉排序树) 哈希表(散列表) 1.概念 2.特点 ...
- Python数据结构与算法-动态规划(钢条切割问题)
一.动态规划(DP)介绍 1.从斐波那契数列看动态规划 (1)问题 斐波那契数列递推式: 练习:使用递归和非递归的方法来求解斐波那契数列的第n项 (2)递归方法的代码实现 import time # ...
- C++数据结构与算法 动态规划
动态规划: 和贪婪算法一样,动态规划对一个问题的解是一系列的决策过程,贪婪算法依据贪婪准则,做出的每一个抉择都是不可撤回的,在动态规划中,需要考察一系列抉择,已确定一个最优抉择序列是否包含一个最优抉择 ...
- 数据结构与算法-动态规划
题目描述: 1.一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 2.一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的 ...
- [数据结构与算法]动态规划:扔鸡蛋问题
参考链接:https://gitee.com/lambertcao/fucking-algorithm/blob/master/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92 ...
- 数据结构与算法--动态规划资源
爬楼梯:http://www.sohu.com/a/149075950_684445 01背包问题:https://juejin.im/post/5affed3951882567161ad511
- 【数据结构与算法】【算法思想】动态规划
贪心算法 回溯算法 分治算法 动态规划 贪心:一条路走到黑,就一次机会,只能哪边看着顺眼走哪边 回溯:一条路走到黑,无数次重来的机会,还怕我走不出来 (Snapshot View) 动态规划:拥有上帝 ...
- python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图
python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...
- C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划
C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...
最新文章
- Codeforces 610C:Harmony Analysis(构造)
- 第二十四章:页面导航(五)
- 前滴滴出行产品经理刘飞:写给产品经理的说明书(上)
- c++错误之map的find()返回值类型
- 拖动效果,防止选中文字兼容代码
- 第十篇:Spring Boot整合mybatis+Mysql 入门试炼02
- 【转】去掉换行符的几个方法
- 分析connection reset by peer, socket write error错误原因
- cen7布署mysql数据库
- django的命令, 配置,以及django使用mysql的流程
- linux支持ext2格式吗,linux正统标准文件系统ext2详解
- Boxplot箱线图
- oracle imp指定表空间导入,imp导入其它表空间数据库
- 现实版的“疑犯追踪”是如何开展的?
- JavaCC详解 绝对干货
- Day146.概述及环境搭建 -Linux
- 统计|两个总体方差比的区间估计(用公式计算)
- 最近在学这个东东,高端大气上档次
- JavaScript实现二级联动下拉菜单
- Python Flask项目部署