【发布时间】:2025-11-21 14:15:02
【问题描述】:
好的,这就是我必须做的事情
作为 MCI (Mammoth Cakes Incorporated) 的员工,您的工作是创造超大型 分层生日蛋糕。分层生日蛋糕是通过将小圆形蛋糕层和 将它们堆叠在一起。
为了完成你的工作,你站在一条大传送带前 而不同大小的层从你面前经过。当你看到你喜欢的,你可以把它拿下来 传送带并将其添加到您的蛋糕中。
您可以根据需要在蛋糕上添加任意多的层, 只要你遵守这些规则:
一旦在蛋糕上添加了一层,就无法移动。 (它弄乱了结冰。)因此,层 只能添加到蛋糕顶部。
每一层只在你面前经过一次。你可以接受也可以离开。如果你拿了,你 必须把它加到你的蛋糕上。如果你离开它,它会沿着传送带移动, 永远不会回来。
蛋糕中的每一层都必须至少与下面的层一样小。你不能放置一个 较大的层在较小的层之上。
您将被提前告知从传送带上下来的层的直径(以英寸为单位)。 你的工作是使用这些层创建最高的蛋糕。 例如,假设下面的列表代表向下的层的直径 传送带:8 16 12 6 6 10 5
假设您将第一层(直径为 8 英寸)用于您的蛋糕。这意味着您可能不会采用第二层(因为您已经有一个 8 英寸大小的层,并且 16 英寸 > 8 英寸)。同样,你不能 取第三层,但你可以取第四层(因为 6”
之后,您可以 也取第五层(规则就是最上面的层不能再大;可以一样 尺寸)。以这种方式进行,我们可以创建一个高度为 4 层的蛋糕:8 6 6 5 但是,如果我们让第一层继续,从第二层开始,我们可以创建一个 高度为5的蛋糕:16 12 6 6 5
您的程序将处理多个输入集,每行一个。每行都以整数 N 开头, 后跟 N 个正整数,表示蛋糕层的大小,按它们的顺序排列 到达传送带。 N 永远是一个非负整数,0 N 100,000。每一层 直径在 1 到 100,000 之间,包括 1 到 100,000。 N = 0 的行表示结束 输入
Sample Input
7 8 16 12 6 6 10 5
10 45 25 40 38 20 10 32 25 18 30
10 10 9 8 7 6 5 4 3 2 1
0
Sample Output
5
6
10
问题:找到最高层的蛋糕
这是我目前所写的:
import java.io.*;
import java.util.*;
public class cake
{
private static String line;
private static ArrayList storage = new ArrayList();
private static Integer highestStack = 0;
public static void main(String [] args)throws IOException
{
FileReader fin = new FileReader("cake.in");
BufferedReader infile = new BufferedReader(fin);
FileWriter fout = new FileWriter("cake.out");
BufferedWriter outfile = new BufferedWriter(fout);
line = infile.readLine();
do
{
String[] temp = line.split(" ");
String number;
for(int j = temp.length-1; j!=0; j--)
{
if(Integer.parseInt(temp[j]) <= Integer.parseInt(temp[j-1]))
{
highestStack++;
}
}
storage.add(highestStack);
// Collections.sort(storage);
line = infile.readLine();
}while(!line.equals("0"));
infile.close();
outfile.close();
}
}
【问题讨论】:
-
看起来您正在解决问题(尽管我看不到您在哪里输出答案)。你有什么问题?
-
我没有解决问题,这只是我写的。问题是我如何想出最高的一叠蛋糕。
-
@Steffan Harris:这门课是关于了解什么是动态编程吗?如果是这样,请忽略所有建议 Java 解决方案的答案,他们错过了 dynamic programming 标记。
-
@Steffan Harris:我要补充一点,我可以编写一个测试用例,使这里建议的所有非动态编程解决方案都惨遭失败,而 DP 解决方案会嘲笑这个问题;)
-
@Webinator:嗯,它确实是一个算法类,动态编程只是我们所做的主题之一。此外,我们可以选择用 Java 或 C++ 编写程序。我选择 Java 是因为我喜欢它的内置方法,尤其是在处理字符串时。我现在真正关于 DP 的只是你将可能的组合存储在某种数据结构中。