Pocket Gems面經prepare: Diamond and Ruby

說我有一個揹包,有n個格子,一個格子能夠放5個鑽石,一個鑽石10塊錢,一個格子能夠放5個ruby,一個ruby 5塊錢, 一個格子能夠放一個裝備,一個裝備25塊錢。
而後給你n個鑽石n個ruby n個裝備,求最大化收益。

相似Ones and Zeroesjava

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)ruby

reduce了dimension,其實還有一個維度是前k個格子,直接用倒序省掉了這個維度spa

 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 }
相關文章
相關標籤/搜索