我有这个问题:
鉴于以下情况:
A = [9,6,9,3,8,9,2,0,4,12]
C = [r,g,r,g,r,g,r,r,r,g]
其中 - r= 红色 - g= 绿色
该列表表示数组中同一索引中数字的颜色,A 即A[0] = 9 = red, A[1] = 6 = green, ...
我们需要选择一个数字N开始,如果该数字是green我们只能向右移动(任意数字)到一个>=N大于当前数字的数字。
如果数字N是red,我们只能向左移动(任意数字)到>=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²)不是吗?