贪心的商人

作者: 何以解君愁 | 来源:发表于2025-12-19 12:27 被阅读0次

 商人经营一家店铺,有 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];
    }
}

相关文章

  • 诚实的商人与贪心的商人

    在五大劫以前,菩萨是一个诚实的商人,在舍利婆(Seriva)国贩卖装饰品。有时他会和舍利婆国另一个贩卖同样商品的商...

  • 诚实的商人与贪心的商人

    在五大劫以前,菩萨是一个诚实的商人,在舍利婆(Seriva)国贩卖装饰品。有时他会和舍利婆国另一个贩卖同样商品的商...

  • 韩语版《小王子》翻译13

    第十三篇啦~继续与贪心商人的角逐…… "오억의 별들을 가지고 뭘 하는 건데?" “要五亿颗星星有什么用?” "...

  • 七夕

    仙鹊实在贪心 乌黑的一片 偷走了相思的月,浪漫的星 或许祂还残存良知 留下了满天的欢呼,商人的礼品 装进我的牢骚 ...

  • 用心,人人都是食神——《食神》观后感

    昨天,跟儿子一起观看了周星驰主演的电影——《食神》。 周星驰扮演的角色由一个贪欲很重的食神兼商人被自己的贪心和嗔心...

  • 舍得

    贪心VS舍得,目标太多—贪心,什么都想得到—贪心,什么都想要美好—贪心,什么都想要舒服—贪心,没有付出就想要得到—...

  • 商人就是商人

    樊登在抖音上 diss 网文,说这些网络破小说,使用微定价的方式,短短一章两块钱,还说写这些小说的人够坏的。 网文...

  • 商人就是商人

    就算曾经有过帮助又怎样,人一旦飞黄腾达,过去都是烟云

  • 做人不能太贪心

    做人不能太贪心 嗯,做人不能太贪心 是的,做人不能太贪心 我发现自己有些贪心 我想要得到更多却又不想失去 别人的,...

  • 希望把真正的好东西与大家分享——VV商会对会员的专访系列之一

    关于VV商会:VV商会是一个电商人帮助电商人,电商人学习电商人,电商人成就电商人的平台。以"分享、交流、互助、尊重...

网友评论

    本文标题:贪心的商人

    本文链接:https://www.haomeiwen.com/subject/facctstx.html