Python中的多米诺纸牌

Python中的多米诺纸牌,python,Python,在Domino纸牌游戏中,您有一个两行多列的网格。网格中的每个正方形都包含一个整数。您将获得2×1的矩形瓷砖,每个瓷砖正好覆盖网格的两个相邻正方形。您必须放置瓷砖以覆盖网格中的所有正方形,以便每个瓷砖覆盖两个正方形,并且没有一对瓷砖重叠 瓷砖的分数是瓷砖覆盖的较大数字和较小数字之间的差值。游戏的目的是最大化所有瓷砖的得分总和 下面是一个网格示例,以及两个不同的平铺及其分数 平铺1的得分为12=(9−8)+(6−2)+(7−1)+(3−2) 而平铺2的得分为6=(8−6)+(9−7)+(3−2)

在Domino纸牌游戏中,您有一个两行多列的网格。网格中的每个正方形都包含一个整数。您将获得2×1的矩形瓷砖,每个瓷砖正好覆盖网格的两个相邻正方形。您必须放置瓷砖以覆盖网格中的所有正方形,以便每个瓷砖覆盖两个正方形,并且没有一对瓷砖重叠

瓷砖的分数是瓷砖覆盖的较大数字和较小数字之间的差值。游戏的目的是最大化所有瓷砖的得分总和

下面是一个网格示例,以及两个不同的平铺及其分数

平铺1的得分为12=(9−8)+(6−2)+(7−1)+(3−2) 而平铺2的得分为6=(8−6)+(9−7)+(3−2)+(2−1). 此网格还有其他可能的平铺,但您可以检查平铺1是否在所有平铺中得分最高

您的任务是读取数字网格,并计算网格的任何平铺都可以获得的最大分数

我对上述问题的解决办法是

n = int(input())
l = [input().split() for j in range(0, 2)]
b = [0 for i in range(0, n)]


b[0] = int(l[0][1]) - int(l[0][0])
b[1] = max(b[0] + abs(int(l[1][0]) - int(l[1][1])), abs(int(l[1][0]) - int(l[0][0])) + abs(int(l[1][1]) - int(l[0][1])))

for i in range(2, n):
    x = b[i-1] + abs(int(l[i][0]) - int(l[i][1]))
    y = b[i-2] + abs(int(l[i][0]) - int(l[i-1][0])) + abs(int(l[i][1]) - int(l[i-1][1]))
    b[i] = max(x, y)

print(b[n-1])
但它给了我错误

 Traceback (most recent call last):
  File "D:/Python Programs/StringFromating/stringformat.py", line 10, in <module>
    x = b[i-1] + abs(int(l[i][0]) - int(l[i][1]))
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“D:/Python Programs/StringFromating/stringformat.py”,第10行,格式为
x=b[i-1]+abs(int(l[i][0])-int(l[i][1]))
索引器:列表索引超出范围

读了你的代码,我看到了一些东西

x = b[i-1] + abs(int(l[i][0]) - int(l[i][1]))
您似乎正在访问l[i][0],其中i为n(最大值)。但l有n列,只有两行

在试图形成一个逻辑之后,我建议你考虑到这一点修改整个程序。可能是有益的。

我对上述问题的看法
#My solution to the above problem :
n=int(input())
arr=list(map(int,input().split()))
arr_2=list(map(int,input().split()))
prev_state=0
final =abs(arr[0]-arr_2[0])
for i in range(1,n):
  vertical_place = final + abs(arr[i]-arr_2[i])
  horizontal_place = prev_state + abs(arr[i] - arr[i-1]) + abs(arr_2[i] - arr_2[i-1])
  prev_state = final
  final = max(vertical_place,horizontal_place)
print(final)

我对整个问题和代码感到困惑,但我知道
b
是一个int,因为您在这里将其设置为int:
b=max(…)
。我无法告诉您如何修复它,因为我不确定这行代码应该做什么,但这就是问题所在。您重新定义了
b
,这就是导致错误的原因(正如@Aran Fey所说)。只是用不同的名字。
n = input()

line1 = input()
line2 = input()

input_data=[[],[]]

temp_1 = line1.split(" ")
temp_2 = line2.split(" ")

for element in temp_1:
    try:
        input_data[0].append(int(element))
    except ValueError:
        pass
for element in temp_2:
    try:
        input_data[1].append(int(element))
    except ValueError:
        pass
    

lookup_table = {}

def arrangements(n,a):
    
    try:
        if lookup_table[n]:
            return(lookup_table[n])
    except:
        pass
    

    diff_1 =  a[0][0]-a[1][0]
    value = abs(diff_1)
    lookup_table[1] = value

    
    diff_2_vertical   = abs(a[0][0]-a[1][0]) + abs(a[0][1]-a[1][1])
    diff_2_horizontal = abs(a[0][0]-a[0][1]) + abs(a[1][0]-a[1][1])
        
    value = max(diff_2_vertical,diff_2_horizontal)
    lookup_table[2] = value
        
    
    
    for i in range(3,n+1):
    
        diff_vertical = abs(a[0][i-1]-a[1][i-1])
        
        
        
        sum_vertical_start = diff_vertical + lookup_table[i-1] 
        
        diff_horizontal = abs(a[0][i-1]-a[0][i-2]) + abs(a[1][i-1]-a[1][i-2])
        
        
        sum_horizontal_start = diff_horizontal + lookup_table[i-2] 
        value = max(sum_vertical_start,sum_horizontal_start)
        lookup_table[i] = value
        
    
    
    return(lookup_table[n])