一、0-1背包问题基础
把 i 件物品放入到容量为 v 的背包里面,我们需要找到最大能放入的情况,下图里面绿色圆圈代表价值为100,所占背包容量为20,其他几个同理。所以我们的最佳方案是放入价值高并且所占空间小的物品,也就是性价比高的物品。
对于每一个物品,我们都可以选择放或者不放,所以就有下面的情况:
我们只需要找到最大的那种情况就可以了,实现的代码如下:
public class Main {
private static int[] weights = {
20,40,80,10};
private static int[] values = {
100,60,200,40};
public static int dp(int a, int n, int[] weights, int[] values) {
int[][] map = new int[a+1][n+1];
for(int i