题目描述
商人经营一家店铺,有number种商品,由于仓库限制每件商品的最大持有数量是item[index],每种商品的价格是item_price[item_index][day]
通过对商品的买进和卖出获取利润,请给出商人在days天内能获取的最大的利润。
注:同-件商品可以反复买进和卖出
输入描述
3 // 输入商品的数量 number
3 // 输入商人售货天数 days
4 5 6//输入仓库限制每件商品的最大持有数量是 item[index
1 2 3//输入第一件商品每天的价格
4 3 2//输入第二件商品每天的价格
1 5 3//输入第三件商品每天的价格
输出描述
32 // 输出商人在这段时间内的最大利润
备注
根据输入的信息:
number=3
days=3
item[3]={4,5,6}
item_price[3][4]={{1,2,3},{4,3,2],{1,5,33}
针对第一件商品,商人在第一天的价格是itemprice[0][0]=1时买入item[0]件,在第三天item_price[0][2]=3的时候卖出,获利最大是8;
·针对第二件商品,不进行交易,获利最大时0;
针对第三件商品,商人在第一天价格是itemprice[2][0]=1时买入item[2]件,在第二天itemprice[2][0]=5的时候卖出,获利最大是24;
因此这段时间商人能获取的最大利润是8+24=32;
示例1
输入
3
3
4 5 6
1 2 3
4 3 2
1 5 2
输出
32
说明
示例2
1
1
1
1
输出
0
说明
题解
如果今天价格大于昨天的价格表示可以昨天买入今天卖出,只要可以赚钱都按照最大持有数量买入
源码 Java
public class BussinessMan {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int count = scanner.nextInt();
int days = scanner.nextInt();
// 每件商品的最大持有数量
int[] holdCnt = new int[days];
for (int i = 0; i < holdCnt.length; i++) {
holdCnt[i] = scanner.nextInt();
}
// 商品每天的价格
int[][] prices = new int[count][days];
int sum = 0;
for (int i = 0; i < count; i++) {
for (int j = 0; j < days; j++) {
prices[i][j] = scanner.nextInt();
if (j > 0) {
// 如果大于昨天的价格表示可以昨天买入今天卖出
if (prices[i][j] > prices[i][j - 1]) {
int diff = prices[i][j] - prices[i][j - 1];
sum += holdCnt[i] * diff;
}
}
}
}
System.out.println(sum);
}
}