背包问题c++动态规划方式

2021年12月1日更新 java

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算01背包问题的结果
     * @param V int整型 背包的体积
     * @param n int整型 物品的个数
     * @param vw int整型二维数组 第一维度为n,第二维度为2的二维数组,vw[i][0],vw[i][1]分别描述i+1个物品的vi,wi
     * @return int整型
     */
    public int knapsack (int V, int n, int[][] vw) {
        int[] maxV = new int[V+1];
        for(int j=V;j>=0;j--) {
            maxV[j] = 0;
        }
        for(int i=0;i<n;i++) {
            for(int j=V;j>=vw[i][0];j--) {
                if (maxV[j] < vw[i][1] + maxV[j-vw[i][0]]) {
                    maxV[j] = maxV[j-vw[i][0]] + vw[i][1];
                }
            }
        }
        return maxV[V];
    }
}
#include <iostream> using namespace std;

int weight[5] = {5,2,4,8,6};
int len[5] = {2,4,3,1,7};
int num = 5;
int space = 15;

int main() {
int max_weight[15] = {0};
for(uint32_t i=0; i<num;i++) {
for(uint32_t j=space; j>len[i]; j--) {
if (max_weight[j-len[i]] + weight[i] > max_weight[j]) {
max_weight[j] = max_weight[j-len[i]] + weight[i];
}
}
for(uint32_t j=0; j<space; j++) {
cout<<max_weight[j]<<" ";
}
cout<<endl;

    }
    cout&lt;&lt;max_weight[14]&lt;&lt;endl;
    return 0;

}

  结果

0 0 0 5 5 5 5 5 5 5 5 5 5 5 5
0 0 0 5 5 5 5 7 7 7 7 7 7 7 7
0 0 0 5 5 5 9 9 9 9 11 11 11 11 11
0 0 8 8 13 13 13 17 17 17 17 19 19 19 19
0 0 8 8 13 13 13 17 17 17 17 19 19 19 23
23

  

posted on 2019-11-02 12:12  出发的兰彻  阅读(823)  评论(0编辑  收藏  举报

导航