找到创建某个序列所需的最小对象数



您有N个字段(1 <= N <= 100),它们都沿着长直路。每个字段可能包含几种类型的音乐播放器;你所拥有的B类音乐播放器(1 <= B <= 20), i类音乐播放器的音量为V(i) (1 <= V(i) <= 100)。此外,有一个强风吹下来路,它承载着音乐之声的一个方向:如果音量大某个领域的音乐是X,那么在另一个领域,它将贡献X-1到总音乐音量(和X-2之后的领域,等等)。但是,一旦它达到0,所贡献的体积就不会变成负值。

给定您在每个领域录制的音乐音量,请计算您可能拥有的音乐播放器的最小数量。

您在任何字段中记录的卷最多为100,000。

输入格式:

  • 第一行:整数N和b

  • 行2 . .1+B:第i+1行包含整数V(i)

  • 行2 + B . .1+B+N:线1+B+i包含所有移动的总体积

样本输入:

5 2570171620.19日

输入详细信息:你拥有5个油田,记录的产量分别为0,17,16,20,19。有两种类型音乐播放器;第一个的容量为5,另一个的容量为7。

输出格式:

  • 第一行:您拥有的音乐播放器的最小数量,如果没有则为-1与输入一致的音乐播放器配置。
样本输出:

4

输出细节:

field 2中有2个类型#1的音乐播放器和1个类型#2的音乐播放器,有另一个类型的音乐播放器#1在第4个领域,总共4个音乐播放器。这是给出现场记录的那些卷所需的最小值。

我的想法:我知道这是一个动态规划问题。我一直以为dp[I]代表到目前为止的第n个领域的音乐播放器,但我似乎不太明白。

你能帮我解释一个好的dp解决方案,如果可能的话,提供一些伪代码,这样我就可以更好地编码dp。

不是最佳解,而是一种利用动态规划解决时间复杂度O(B * MAX(recorded volume) + N)问题的方法

这是一个两步解决方案。在步骤1中,找到从1到MAX(录制的音量)所需的最小音乐播放器(可能有些音量不可用)

然后在步骤2中,从第一个字段到最后一个字段,计算每个字段上需要产生的音量,然后使用步骤1中的结果来知道该字段中需要多少音乐播放器。

以输入/输出为例。在步骤1中,你可以得到player_required[5] = 1, player_required[7] = 1, player_required[10] = 2, player_required[12] = 2, player_required[14] = 2, player_required[15] = 3, player_required[17] = 3, player_required[19] = 3, ... .这意味着你需要一个玩家去创造5或7个音量,但是如果你想创造15或17个音量,你需要3个玩家。

在步骤2中,首先转到field 1,音量为0,不需要玩家。在场地2,音量是17,所以你需要3名球员在这个场地。在字段3中,字段2的音量为16(17-1),它与字段3中的音量相匹配。因此,场地3不需要球员。然后在字段4中,字段3的体积是15,但是字段中的体积是20。所以你知道你应该在第4场产生5的体积。根据第一步的计算,这里需要1个玩家。5号场地不需要任何队员。总而言之,你需要4个音乐播放器(3个在第2个领域,1个在第4个领域)

如果没有办法在步骤2的任何字段中产生所需的音量,您应该输出-1,因为没有与输入一致的音乐播放器配置。

相关内容

  • 没有找到相关文章

最新更新