python中的UVa 11450-dp

时间:2018-07-16 18:07:23

标签: python dynamic-programming

我为UVa Online Judge的任务而苦恼 11450 - Wedding shopping

我设法用C ++编写了代码并获得了AC。 不幸的是,我无法在python-TLE中做同样的事情。

我想学习用python编写代码,这就是为什么我使用它。我知道C ++在竞争性编程等方面明显更快,更好。

任何想法这段代码有什么问题吗?我该如何改善才能获得AC?

from sys import stdin, stdout


def shop(money, curr_g):
    if money < 0:
        return -1
    if curr_g == c:
        return m - money
    if memo[money][curr_g] is not -1:
        return memo[money][curr_g]
    ans = -1
    for model in range(1, price[curr_g][0] + 1):
        ans = max(ans, shop(money - price[curr_g][model], curr_g + 1))
    memo[money][curr_g] = ans
    return ans


price = list(list() for i in range(21))
memo = list(list(-1 for j in range(21)) for i in range(201))
n = int(input())
for i in range(n):
    m, c = map(int, stdin.readline().split())
    for a in range(c):
        price[a] = [int(x) for x in stdin.readline().split()]

    for a in range(201):
        for b in range(21):
            memo[a][b] = -1

    ans = shop(m, 0)
    stdout.write(str(ans) + "\n") if ans >= 0 else stdout.write('no solution\n')

0 个答案:

没有答案