• Pocket Gems面经prepare: Diamond and Ruby


    说我有一个背包,有n个格子,一个格子可以放5个钻石,一个钻石10块钱,一个格子可以放5个ruby,一个ruby 5块钱, 一个格子可以放一个装备,一个装备25块钱。
    然后给你n个钻石n个ruby n个装备,求最大化收益。

    类似Ones and Zeroes

    Dp[i][j][k] = Max(dp[i-5][j][k] + 5*10,    dp[i][j-5][k] + 5*5,    dp[i][j][k-1] + 1*25)

    reduce了dimension,其实还有一个维度是前k个格子,直接用倒序省掉了这个维度

     1 package pg;
     2 
     3 import java.util.*;
     4 
     5 public class Ruby {
     6     
     7     public static int maxProfit(int n, int a, int b, int c) {
     8         int[][][] dp = new int[a+1][b+1][c+1];
     9         for (int l=1; l<=n; l++) {
    10             for (int i=a; i>=0; i--) {
    11                 for (int j=b; j>=0; j--) {
    12                     for (int k=c; k>=0; k--) {
    13                         if (i >= 5) dp[i][j][k] = Math.max(dp[i][j][k], dp[i-5][j][k] + 5*10);
    14                         if (j >= 5) dp[i][j][k] = Math.max(dp[i][j][k], dp[i][j-5][k] + 5*5);
    15                         if (k >= 1) dp[i][j][k] = Math.max(dp[i][j][k], dp[i][j][k-1] + 1*25);
    16                     }
    17                 }
    18             }
    19         }
    20         return dp[a][b][c];
    21     }
    22     
    23 
    24     /**
    25      * @param args
    26      */
    27     public static void main(String[] args) {
    28         // TODO Auto-generated method stub
    29         int res = maxProfit(3, 10, 15, 3);
    30         System.out.println(res);
    31     }
    32 
    33 }
  • 相关阅读:
    在win8.1 64位环境下有关Oracle的安装和卸载
    动手又动脑
    二柱子四则运算(课堂练习)
    Java学生成绩绩点管理系统
    小学期第八周收获
    小学期第七周收获
    小学期第六周收获
    小学期第五周收获
    《大道至简》读后感
    小学期第四周收获
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/6423891.html
Copyright © 2020-2023  润新知