0

我有这个问题:

鉴于以下情况:

A = [9,6,9,3,8,9,2,0,4,12] C = [r,g,r,g,r,g,r,r,r,g]

其中 - r= 红色 - g= 绿色

该列表表示数组中同一索引中数字的颜色,AA[0] = 9 = red, A[1] = 6 = green, ...

我们需要选择一个数字N开始,如果该数字是green我们只能向右移动(任意数字)到一个>=N大于当前数字的数字。

如果数字Nred,我们只能向左移动(任意数字)到>=N大于当前数字的数字。

目标:找到可能的最长移动序列,返回路径的索引。如果有多个相同长度且最长的子序列,则返回任何人:

示例 1:

    A = [9,6,9,3,8,9,2,0,4,12]
    C = [r,g,r,g,r,g,r,r,r,g]
    output: [7,6,3,8,1,4,0]

示例 2:

    A = [1,2,3,4,5,6,7,10]
    C =[r,r,r,r,r,r,r,r]
    output:[7]

示例 3:

    A = [5,3,2,0,24,9,20]
    C = [g,g,g,g,r,r,g]
    output: [0,5,4]

我的算法的当前想法:

考虑 中每个元素的可能移动A,对于第一个示例A[0] = 9= red

由于没有左元素,因此只有1移动(选择A[0])。

所以,OPT[0] = 1。对于A[1] = 6= green。可能的移动是:A[2]= 9, A[4] = 8, A[5] = 9, A[9] =12

递归是OPT[i] = max{1, 1+ OPT[j]}j一个可能的举动。

我是否在使用动态编程的正确轨道上?运行时O(n²)不是吗?

4

0 回答 0