华为OD E卷(100分)05-贪心商人

前言

        工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。

题目描述

        商人经营一家店铺,有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  //输出商人在这段时间内的最大利润

解题思路

  • 对于这个问题,我们可以考虑使用贪心策略来解决。贪心策略的核心思想是在每一步都做出当前看起来最优的选择,希望最终得到全局最优解。

题解 

java实现

package huawei.e100;

import java.util.Scanner;

/**
* @author arnold
* @date 2024年12月9日
* 
*/
public class T05 {
	
	private static void run(int[] pn, int[][] ps, int days){
		int sum = 0;
		for (int i = 0; i < pn.length; i++ ) {
			for (int j = 1; j < days; j++ ) {
				if(ps[i][j] > ps[i][j-1]) { //当价格比前一天高时卖出,同时补仓
					sum += (ps[i][j] -  ps[i][j-1]) *pn[i];
				}
			}
		}
		System.out.println(sum);
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int productTypes = sc.nextInt();
		int days = sc.nextInt();
		int[] pn = new int[productTypes]; // 存商品的限定数量
		int[][] ps = new int[productTypes][days];// 存商品的每天的价格
		
		for (int i = 0; i < productTypes; i++ ) {
			pn[i] = sc.nextInt();
		}
		for (int i = 0; i < productTypes; i++ ) {
			for (int j = 0; j < days; j++ ) {
				ps[i][j] = sc.nextInt();
			}
		}
		run(pn, ps, days);

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

arnold66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值