描述
小v负责一次活动礼品采购,每一款礼品的受欢迎程度(热度值)各不相同。现给出总金额以及各礼品的单价和热度值,且每个礼品只采购一个,如何购买可以使得所有礼品总热度值最高。
输入:
第一行是一个正整数,表示总金额(不大于1000)
第二行是一个长度为n的正整数数组,表示礼品单价(n不大于100)
第三行是一个长度为n的正整数数组,表示对应礼品热度值
输出:
一个正整数,表示可获得的最高热度值
样例输入:1000
200 600 100 180 300 450
6 10 3 4 5 8
样例输出:21
代码部分
import java.lang.*;
public class Solution {
public static int sol(int money,int[] value,int[] hot){
int[][] dp=new int[value.length+1][money+1];
//一行一行填充,
/*
money
value
*/
for(int i=1;i<=value.length;i++){
for(int j=0;j<=money;j++){
if(j==0||i==0){
dp[i][j]=0;
continue;
}
dp[i][j]=dp[i-1][j];//第i个物品不管不问
if(j>=value[i-1]){
dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-value[i-1]]+hot[i-1]);
}
}
}
return dp[value.length][money];
}
public static void main(String[] args) {
int money=1000;
int[] value=new int[]{200,600,100,180,300,450};
int[] hot=new int[]{6,10,3,4,5,8};
int res=sol(money,value,hot);
System.out.print(res);
}
}