1.题目描述
礼品采购,每款礼品的受欢迎程度不一样,现给出总金额以及各礼品的单价和热度值,且每个礼品只采购一个,如何购买可以使所有礼品总热度值最高
输入:
第一行输入正整数,表示总金额
第二行是一个长度为n的正整数数组,表示礼品单价
第三行是一个长度为n的正整数数组,表示对应礼品热度
输出
最高总热度值
示例:
输入:
1000
200 600 100 180 300 450
6 10 3 4 5 8
输出:
21
2.解题思路
很明显的0-1背包问题
- 情况1:第i件不放进去,所得价值f[v]
- 情况2:第i件放进去,所得价值[v-c[i]]+w[i]
- 状态转移方程:f[v] = max(f[v],f[v-w[i]]+c[i])
weight表示每件物品的重量,value代表每件物品的价值,total 表示容量,Num表示物品数量,
设 f[v]表示重量不超过v公斤的最大价值,
- 礼品单价为背包问题中的重量weight,礼品热度代表背包问题中的价值value
3.代码
import java.util.*;
public class Main {
public static void main(String[] args) {
int total = 1000;
int