在Domino Solitaire中,您有一个包含两行和多列的网格。网格中的每个方块都包含一个整数。您将获得一个矩形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
答案 0 :(得分:1)
好吧,看了你的代码,我看到了什么。
x = b[i-1] + abs(int(l[i][0]) - int(l[i][1]))
您似乎访问l [i] [0],其中i是n(最大值)。但我有n列,只有两行。
在尝试形成逻辑之后,我建议你记住整个程序。可能是有益的。
答案 1 :(得分:1)
#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)
答案 2 :(得分:0)
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])