原题网址: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;
}
}