92
来源:互联网 发布:傲战无双坐骑进阶数据 编辑:程序博客网 时间:2024/04/28 21:58
2017.9.6
一种我最好理解的写法。
public class Solution { /** * @param m: An integer m denotes the size of a backpack * @param A: Given n items with size A[i] * @return: The maximum size */ /**这个是最简单的背包问题了,给定n个物品,和背包大小,算最多装多满 * 0 1 背包的状态转移方程为: dp[i][j] = max{dp[i-1][j], dp[i-1][j-A[i]] + A[i] } * j 为当前背包的重量*/public int backPack(int m, int[] A) { // write your code hereint length = A.length;/* dp[i][j] 当背包空间为j时,要放入第i个物品,此时可以装满背包的空间 * dp[i][j] = max{dp[i],A[i] + dp[i-1]} */int [][]dp = new int[length + 1][m+1];// 初始化,当背包空间为0的时候,可装满背包的空间始终为0。for(int i = 0; i < length; i++){dp[i][0]= 0;}for(int j = 1; j <= m; j++){if(A[0] <= j){dp[0][j] = A[0];}for(int i = 1; i < length; i++){if(A[i] > j){dp[i][j] = dp[i-1][j];}else{dp[i][j] = Math.max(dp[i-1][j], A[i] + dp[i-1][j-A[i]]);}}}return dp[length -1][m]; }}
一种看起来更巧妙的方法
public int backPack(int m, int[] A) { // write your code hereint length = A.length;int []dp = new int[m + 1];for(int i = 0; i < length; i++){for(int j = m; j>= A[i]; j--){if(j > A[i]){dp[j] = Math.max(dp[j], dp[j-A[i]] + A[i]);}}}return dp[m]; }
阅读全文
0 0
- 92
- 92
- 92
- 92
- 92
- nyoj-92
- Euler 92
- 92@365
- 92 NSURLCache
- ocp-92
- #92 Backpack
- 92DLQ
- 92----htmlentities
- bestcoder 92
- bestcoder 92
- 练习92
- Leetcode 92
- 第92个字节
- Wmware中安装ubuntu系统无法全屏显示
- re 中 报错 no such group
- 一台电脑同时运行多个tomcat配置方法
- FILTER:progid:DXImageTransform.Microsoft.Gradient使用
- Java内存模型分析(堆、栈和常量池以及相关String的详细讲解)
- 92
- Servicehot告诉你运维常说的 5个9、4个9、3个9啥意思?
- 第二章 算法基础
- jQuery选择器和选取方法
- SQLite:一次正常执行事务的过程
- [WPF] UserControl vs CustomControl
- oracle建表空间 各种语句
- 《UNIX环境高级编程》笔记9--文件访问权限和新文件、目录所有权
- MAC 安装MySQL my.cnf配置文件