动态规划问题
来源:互联网 发布:看门狗画面设置优化 编辑:程序博客网 时间:2024/06/05 02:05
// version 0: top-downpublic class Solution { /** * @param triangle: a list of lists of integers. * @return: An integer, minimum path sum. */ public int minimumTotal(int[][] triangle) { if (triangle == null || triangle.length == 0) { return -1; } if (triangle[0] == null || triangle[0].length == 0) { return -1; } // state: f[x][y] = minimum path value from 0,0 to x,y int n = triangle.length; int[][] f = new int[n][n]; // initialize f[0][0] = triangle[0][0]; for (int i = 1; i < n; i++) { f[i][0] = f[i - 1][0] + triangle[i][0]; f[i][i] = f[i - 1][i - 1] + triangle[i][i]; } // top down for (int i = 1; i < n; i++) { for (int j = 1; j < i; j++) { f[i][j] = Math.min(f[i - 1][j], f[i - 1][j - 1]) + triangle[i][j]; } } // answer int best = f[n - 1][0]; for (int i = 1; i < n; i++) { best = Math.min(best, f[n - 1][i]); } return best; }}//Version 1: Bottom-Uppublic class Solution { /** * @param triangle: a list of lists of integers. * @return: An integer, minimum path sum. */ public int minimumTotal(int[][] triangle) { if (triangle == null || triangle.length == 0) { return -1; } if (triangle[0] == null || triangle[0].length == 0) { return -1; } // state: f[x][y] = minimum path value from x,y to bottom int n = triangle.length; int[][] f = new int[n][n]; // initialize for (int i = 0; i < n; i++) { f[n - 1][i] = triangle[n - 1][i]; } // bottom up for (int i = n - 2; i >= 0; i--) { for (int j = 0; j <= i; j++) { f[i][j] = Math.min(f[i + 1][j], f[i + 1][j + 1]) + triangle[i][j]; } } // answer return f[0][0]; }}//Version 2 : Memorize Searchpublic class Solution { private int n; private int[][] minSum; private int[][] triangle; private int search(int x, int y) { if (x >= n) { return 0; } if (minSum[x][y] != Integer.MAX_VALUE) { return minSum[x][y]; } minSum[x][y] = Math.min(search(x + 1, y), search(x + 1, y + 1)) + triangle[x][y]; return minSum[x][y]; } public int minimumTotal(int[][] triangle) { if (triangle == null || triangle.length == 0) { return -1; } if (triangle[0] == null || triangle[0].length == 0) { return -1; } this.n = triangle.length; this.triangle = triangle; this.minSum = new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { minSum[i][j] = Integer.MAX_VALUE; } } return search(0, 0); }}
解决方法四种:
1.DFS: Traverse
● DFS: Divide Conquer
● Divide Conquer + Memorization
● Traditional Dynamic Programming
0 0
- 动态规划----贪心的动态规划问题
- 动态规划问题
- 动态规划问题
- 动态规划回文问题
- 动态规划 背包问题
- 【动态规划】背包问题
- 动态规划问题
- 动态规划问题
- 【动态规划】加油问题
- 动态规划基本问题
- 动态规划-背包问题
- 动态规划问题
- 动态规划基本问题
- 动态规划---->货郎担问题
- 动态规划+背包问题
- 乘法问题(动态规划)
- 动态规划问题
- 动态规划问题
- LEETCODE--Odd Even Linked List
- Android 四大组件 —— 服务
- Launcher3 Folder源码笔记
- Ubuntu静态网络配置
- iOS开发流程
- 动态规划问题
- HDU 3001 Travelling(状压dp)
- 初学,C语言日历制作
- HashMap的实现原理
- solr5.3.1 集群服务搭建(转)
- pcl 1.6 + vs2013 + openmesh 3.3 配置
- Flask + SAE 接入微信公众平台
- css实现屏幕自适应(仿谷歌静态页面)
- 【Java Socket】入门系列 2.1.Java网络相关API — InetAddress类的应用