如何根据给定的规则找到最大数量(以DP的方式)?

时间:2013-08-30 07:48:29

标签: algorithm dynamic-programming

问题:给定S格式abcdefijak...,每个字母都指一个数字。每3个数字由3个数字素数组成,每个数字彼此不同。什么是最大的S

有很多方法可以解决这个问题。我的问题是:如何在DP中解决它?

2 个答案:

答案 0 :(得分:2)

我写了一个愚蠢的暴力算法:

def isprime(n):
    for x in xrange(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

primes3 = filter(isprime, range(100, 1000))

def biggest():
    return max([biggie(x, set(primes3)-set([x])) for x in primes3])

def biggie(sofar, primes):
    next2 = sofar % 100
    found = sofar
    for prime in filter(lambda x: 10*next2 <= x < 10*(next2+1), primes):
        found = max(found, biggie(10*sofar + (prime % 10), primes - set([prime])))
    return found

这给了我9419919379773971911373313179的结果。用Google搜索,发现了这个:https://stackoverflow.com/questions/3836008/find-largest-number-with-all-contiguous-triples-being-unique-primes

关闭为重复...

答案 1 :(得分:1)

找到所有3位数的素数,然后按降序排列所有素数。如果您的任务中没有看不到任何要求,那就是全部。