华为机试真题 Java 实现书籍叠放
Posted MISAYAONE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试真题 Java 实现书籍叠放相关的知识,希望对你有一定的参考价值。
目录
题目
给定一组书的长宽,并且只有当一本书的长宽同时小于另一本书的长宽时,两书才能叠放在一起,求该组书中最多能有多少本书叠放在一起。
[[20,16],[15,11],[10,10],[9,10]]
3
前三本可叠放在一起。
思路
1:注意审题,书A的长宽度都比B长宽大时,才能叠上去,也就是两个数字都比另外一个大才行。
2:那题目就比较好理解了,先按照长度、宽度对书籍进行排序(长度相同的,再按照宽度排序)。
3:动态规划,转移方程:dp[i] = max(dp[i], dp[j] + 1);
考点
1:动态规划
Code
import java.util.Scanner;
import java.util.*;
public class Main
public static int max_machine=0;
public static void main(String[] args)
//处理输入
Scanner in = new Scanner(System.in);
String book_info = in.nextLine().replaceAll("\\\\[", "").replaceAll("\\\\]", "");
String[] book_list = book_info.split(",");
int[][] books = new int[book_list.length / 2][2];
for (int i = 0; i < books.length; i++)
books[i][0] = Integer.parseInt(book_list[i * 2]);
books[i][1] = Integer.parseInt(book_list[i * 2 + 1]);
Arrays.sort(books, (a, b) -> (a[0] == b[0] ? b[1] - a[1] : a[0] - b[0]));
int[] dp = new int[books.length];
Arrays.fill(dp, 1);
int res = 0;
for (int i = 0; i < books.length; i++)
for (int j = 0; j < i; j++)
if (books[i][1] > books[j][1])
dp[i] = Math.max(dp[i], dp[j] + 1);
res = Math.max(dp[i], res);
System.out.println(res);
以上是关于华为机试真题 Java 实现书籍叠放的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试真题Python实现 叠放书籍真题+解题思路+代码(2022&2023)