zoukankan      html  css  js  c++  java
  • Lintcode: Backpack II

    Given n items with size A[i] and value V[i], and a backpack with size m. What's the maximum value can you put into the backpack?
    Note
    You cannot divide item into small pieces and the total size of items you choose should smaller or equal to m.
    
    Example
    Given 4 items with size [2, 3, 5, 7] and value [1, 5, 2, 4], and a backpack with size 10. The maximum value is 9.

    这道题还是跟Backpack有大不一样之处

    用子问题定义状态:即f[i][v]表示前 i 件物品恰放入一个容量为 j 的背包可以获得的最大价值。则其状态转移方程便是:

    f[i][j] = max{f[i-1][j], j>=A[i-1]? f[i-1][j-A[i-1]]+V[i-1] : 0}

     1 public class Solution {
     2     /**
     3      * @param m: An integer m denotes the size of a backpack
     4      * @param A & V: Given n items with size A[i] and value V[i]
     5      * @return: The maximum value
     6      */
     7     public int backPackII(int m, int[] A, int V[]) {
     8         int[][] res = new int[A.length+1][m+1];
     9         res[0][0] = 0;
    10         for (int i=1; i<=A.length; i++) {
    11             for (int j=0; j<=m; j++) {
    12                 if (j - A[i-1] < 0)
    13                     res[i][j] = res[i-1][j];
    14                 if (j - A[i-1] >= 0) {
    15                     res[i][j] = Math.max(res[i-1][j], res[i-1][j-A[i-1]]+V[i-1]);
    16                 }
    17             }
    18         }
    19 
    20         return res[A.length][m];
    21     }
    22 }
  • 相关阅读:
    [刷题] 1016 部分A+B (15分)
    [刷题] 1022 D进制的A+B (20分)
    [刷题] 1021 个位数统计 (15分)
    [刷题] 1020 月饼 (25分)
    洛谷&BZOJ [POI2016]Korale
    反演魔术---二项式反演
    毒瘤养成记1: 如何卡hash
    多项式全家桶
    [CQOI]排序机械臂
    后缀自动机感性理解
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/4272300.html
Copyright © 2011-2022 走看看