前言
工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近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);
}
}