原题网址:http://www.lintcode.com/en/problem/backpack-iii/
Given n kind of items with size Ai and value Vi(each item has an infinite number available) and a backpack with size m. What's the maximum value can you put into the backpack?
Notice
You cannot divide item into small pieces and the total size of items you choose should smaller or equal to m.
Given 4 items with size [2, 3, 5, 7] and value [1, 5, 2, 4], and a backpack with size10. The maximum value is 15.
方法:动态规划。
public class Solution {
/**
* @param A an integer array
* @param V an integer array
* @param m an integer
* @return an array
*/
public int backPackIII(int[] A, int[] V, int m) {
// Write your code here
int[] values = new int[m + 1];
Arrays.fill(values, -1);
values[0] = 0;
int max = 0;
for(int i = 0; i < A.length; i++) {
for(int j = 0; j <= m; j++) {
if (values[j] != -1 && j + A[i] <= m) {
values[j + A[i]] = Math.max(values[j + A[i]], values[j] + V[i]);
max = Math.max(max, values[j + A[i]]);
}
}
}
return max;
}
}

本文针对背包III问题进行了详细的解析,并提供了一种动态规划的解决方案。该问题涉及无限数量的物品种类,每种物品都有特定的大小和价值。目标是在不超过背包容量的前提下,选择物品以达到最大的总价值。
4620

被折叠的 条评论
为什么被折叠?



