商人经营一家店铺,有 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 // 输出商人在这段时间内的最大利润
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
int days = sc.nextInt();
int[] item = new int[number];
int[][] item_price = new int[number][days];
for(int i = 0;i < number;i++){
item[i] = sc.nextInt();
}
int res = 0;
// 循环输入每种商品的价格变化
for (int i = 0; i < number; i++) {
int[] prices = new int[days];
for (int j = 0; j < days; j++) {
prices[j] = sc.nextInt();
}
// 计算单件商品的最大利润并乘以数量
res += maxGain(prices, days) * item[i];
}
System.out.print(res);
}
public static int maxGain(int[] prices,int days){
int[][] dp = new int[days][2];
dp[0][0] = 0;
dp[0][1] = - prices[0];
for(int i = 1;i < days;i++){
dp[i][0] = Math.max(dp[i - 1][0],dp[i - 1][1] + prices[i]);
dp[i][1] = Math.max(dp[i - 1][0] - prices[i],dp[i - 1][1]);
}
return dp[days - 1][0];
}
}
//或
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//商品数
int number = sc.nextInt();
//商品出售天数
int days = sc.nextInt();
//最大持有数
//第一件 第二件
//1 2 3 每一天
//4 3 2
//1 5 3
int[] maxNum = new int[number];
for(int i = 0;i < number;i++){
maxNum[i] = sc.nextInt();
}
//number days
int[][] prices = new int[number][days];
int res = 0;
for(int i = 0;i < number;i++){
for(int j = 0;j < days;j++){
prices[i][j] = sc.nextInt();
}
//每一件的最大持有数量 * 最大利润
res += maxNum[i] * getMax(prices,i);
}
System.out.print(res);
}
public static int getMax(int[][] prices,int i){
if(prices.length == 0){
return 0;
}
//计算每一天最大利润
int[][] dp = new int[prices[0].length][2];
dp[0][0] = 0;
dp[0][1] = -prices[i][0];
for(int j = 1;j < prices[0].length;j++){
//当天没有商品
dp[j][0] = Math.max(dp[j - 1][0],dp[j - 1][1] + prices[i][j]);
//当天有商品
dp[j][1] = Math.max(dp[j - 1][1],dp[j - 1][0] - prices[i][j]);
}
return dp[prices[0].length - 1][0];
}
}









网友评论