Python中的多米诺纸牌
在Domino纸牌游戏中,您有一个两行多列的网格。网格中的每个正方形都包含一个整数。您将获得2×1的矩形瓷砖,每个瓷砖正好覆盖网格的两个相邻正方形。您必须放置瓷砖以覆盖网格中的所有正方形,以便每个瓷砖覆盖两个正方形,并且没有一对瓷砖重叠 瓷砖的分数是瓷砖覆盖的较大数字和较小数字之间的差值。游戏的目的是最大化所有瓷砖的得分总和 下面是一个网格示例,以及两个不同的平铺及其分数 平铺1的得分为12=(9−8)+(6−2)+(7−1)+(3−2) 而平铺2的得分为6=(8−6)+(9−7)+(3−2)+(2−1). 此网格还有其他可能的平铺,但您可以检查平铺1是否在所有平铺中得分最高 您的任务是读取数字网格,并计算网格的任何平铺都可以获得的最大分数 我对上述问题的解决办法是Python中的多米诺纸牌,python,Python,在Domino纸牌游戏中,您有一个两行多列的网格。网格中的每个正方形都包含一个整数。您将获得2×1的矩形瓷砖,每个瓷砖正好覆盖网格的两个相邻正方形。您必须放置瓷砖以覆盖网格中的所有正方形,以便每个瓷砖覆盖两个正方形,并且没有一对瓷砖重叠 瓷砖的分数是瓷砖覆盖的较大数字和较小数字之间的差值。游戏的目的是最大化所有瓷砖的得分总和 下面是一个网格示例,以及两个不同的平铺及其分数 平铺1的得分为12=(9−8)+(6−2)+(7−1)+(3−2) 而平铺2的得分为6=(8−6)+(9−7)+(3−2)
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])