java解法

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 输入商品数量和天数
        int itemNum = sc.nextInt();  // 商品种类数
        int dayCount = sc.nextInt(); // 天数

        // 输入每种商品的限制数量
        int[] limits = new int[itemNum];
        for (int i = 0; i < itemNum; i++) {
            limits[i] = sc.nextInt();
        }

        // 输入每种商品每天的价格矩阵
        int[][] priceMatrix = new int[itemNum][dayCount];
        for (int i = 0; i < itemNum; i++) {
            for (int j = 0; j < dayCount; j++) {
                priceMatrix[i][j] = sc.nextInt();
            }
        }

        // 计算并输出最大收益
        System.out.println(getMaxProfit(itemNum, dayCount, limits, priceMatrix));
    }

    /**
     * 计算所有商品的最大收益
     *
     * @param itemNum 商品种类数
     * @param dayCount 天数
     * @param limits 每种商品的限制数量
     * @param priceMatrix 商品的价格矩阵
     * @return 最大收益
     */
    public static int getMaxProfit(int itemNum, int dayCount, int[] limits, int[][] priceMatrix) {
        int profit = 0; // 总收益

        // 遍历每种商品
        for (int i = 0; i < itemNum; i++) {
            // 遍历商品每天的价格
            for (int j = 1; j < dayCount; j++) {
                // 如果当天价格高于前一天,计算收益
                if (priceMatrix[i][j] > priceMatrix[i][j - 1]) {
                    profit += (priceMatrix[i][j] - priceMatrix[i][j - 1]) * limits[i];
                }
            }
        }

        return profit; // 返回总收益
    }
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

C++解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

C解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

JS解法

具体步骤如下:

输入解析:
第 1 行输入商品种类数。
第 2 行输入交易天数。
第 3 行输入每种商品的最大持有量(maxHoldings)。
接下来的输入是每种商品每天的价格表。
计算收益:
遍历每种商品的价格表。
如果某天的价格低于次日价格,则计算价格差乘以商品数量,作为该天的收益。
累加所有商品的收益,得到总收益。

// 使用 readline 模块处理多行输入
const rl = require("readline").createInterface({
  input: process.stdin,
  output: process.stdout,
});

const records = []; // 存储输入数据
let productCount, tradeDays, maxHoldings; // 定义商品数量、交易天数和每种商品的最大持有量

rl.on("line", (line) => {
  records.push(line); // 读取每行输入

  // 解析输入的前 3 行
  if (records.length === 3) {
    productCount = parseInt(records[0], 10); // 商品种类数
    tradeDays = parseInt(records[1], 10); // 交易天数
    maxHoldings = records[2].split(" ").map(Number); // 每种商品的最大持有量数组
  }

  // 当所有输入数据读取完成
  if (productCount && records.length === productCount + 3) {
    // 解析价格表数据
    const priceChanges = records.slice(3).map((entry) =>
      entry.split(" ").map(Number)
    );
    // 计算最大收益
    console.log(
      maximizeProfit(productCount, tradeDays, maxHoldings, priceChanges)
    );
    rl.close(); // 关闭输入流
  }
});

/**
 * 计算最大收益
 * @param {number} products 商品种类数
 * @param {number} days 交易天数
 * @param {number[]} holdings 每种商品的最大持有量
 * @param {number[][]} priceTable 每种商品每天的价格表
 * @returns {number} 最大收益
 */
function maximizeProfit(products, days, holdings, priceTable) {
  let profitSum = 0; // 总收益

  // 遍历每种商品
  for (let idx = 0; idx < products; idx++) {
    // 遍历每天的价格
    for (let day = 0; day < days - 1; day++) {
      // 如果第二天的价格高于当天,计算收益
      if (priceTable[idx][day] < priceTable[idx][day + 1]) {
        profitSum +=
          (priceTable[idx][day + 1] - priceTable[idx][day]) * holdings[idx];
      }
    }
  }

  return profitSum; // 返回总收益
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/144537948"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!