-3

私のコードはこのようなもので、行と列が15を超えると長すぎます。より良い解決策はありますか? 問題のリンク: https://projecteuler.net/problem=15

#!/usr/bin/env python
rows = 3
cols = 3
start_row = 0
start_col = 0
count = 0

def trace(row, col):
    if row == rows and col == cols:
        global count
        count += 1
        return 
    if col + 1 <= cols:
        # print row, col
        trace(row, col + 1)

    if row + 1 <= rows:
        # print row, col
        trace(row + 1, col)

trace(start_row, start_col)
print count
4

1 に答える 1

0

最後に、動的計画法を使用すると問題を解決できる可能性があります。

#!/usr/bin/env python
rows = 20
cols = 20
pre_list = {}

count = 0
pre_list = {}
for i in xrange(0, rows + 1):
    for j in xrange(0, rows + 1):
        pre_list[(i,j)] = []

for i in xrange(0, rows + 1):
    for j in xrange(0, rows + 1):
        if i > 0:
            pre_list[(i,j)].append((i-1, j))
        if j > 0:
            pre_list[(i,j)].append((i, j-1))

route = {(rows,cols):1}

keys = route.keys()
while True:
    if not keys:
        break

    new_route = {}
    for key in keys:
        # print 'key', key
        pre = pre_list[key]
        if not pre:
            continue
        for item in pre:
            new_route[item] = 1
            # print 'route', route
            if item in route:
                route[item] += route[key]
            else:
                route[item] = route[key]
            # print 'route', route
        route[key] = 0
        # print new_route
    keys = new_route.keys()
    # print 'new keys', keys

print route[(0,0)]
于 2012-11-05T14:32:17.370 に答える