Skip to content

Instantly share code, notes, and snippets.

@vayn
Created November 8, 2010 13:44
Show Gist options
  • Save vayn/667698 to your computer and use it in GitHub Desktop.
Save vayn/667698 to your computer and use it in GitHub Desktop.
排序并选出最大的乘法组合
# 想的我快吐血~~~
# http://wiki.woodpecker.org.cn/moin/AllStartFromGame
def solve(seq,where):
n = len(seq)
seq.sort()
seq.reverse()
table = [ [] for i in range(n) ]
left, right = where, n - where
leftr = long('1'*left)
rightr = long('1'*right)
flag=[]
for item in [ int(x) for x in seq]:
for i in range(left):
table[left-i-1] = (leftr + 10**i) * rightr
for i in range(right):
table[right-i+where-1] = leftr * (rightr + 10**i)
for i in flag:
table[i] = 0
tablesorted = table[:]
tablesorted.sort()
maxindex = table.index(tablesorted[-1])
if maxindex >= where:
rightr = rightr + (item-1) * 10**(right-maxindex+where-1)
else:
leftr = leftr + (item-1) * 10**(left-maxindex-1)
flag.append(maxindex)
#print maxindex, leftr, rightr
return leftr, rightr
import sys
leftr, rightr = solve(list(sys.argv[1]),int(sys.argv[2]))
print "Maximum at", leftr,rightr, ',product', leftr*rightr
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment