与えられた数C(Cは整数)があり、数のリストが与えられています(これをNとしましょう、リストNのすべての数は整数です)。 私のタスクは、例えばC.コードの最適化 - 組み合わせの量
を表現する可能性の量を見つけることである:
入力:
C = 4
N = [1, 2]
出力:
3
ため:
4 = 1 + 1 + 1 + 1 = 1 + 1 + 2 = 2 + 2
私のコードは、小さな数字に対してはかなりうまく機能しています。しかし、どのように私はそれがより大きい整数でも動作するように最適化することはできません。どんな助けもありがとう!
私のコードがあります:
import numpy
import itertools
def amount(C):
N = numpy.array(input().strip().split(" "),int)
N = list(N)
N = sorted(N)
while C < max(N):
N.remove(max(N))
res = []
for i in range(1, C):
for j in list(itertools.combinations_with_replacement(N, i)):
res.append(sum(list(j)))
m = 0
for z in range (0, len(res)):
if res[z] == C:
m += 1
if N[0] == 1:
return m + 1
else:
return m
ここではnumpyは必要ありません。何かがあれば、それはあなたを遅らせるだろう。とにかくそれをすぐに 'list'に変換します。それは意味をなさない。 –
パーティションを数えたいと思うようです:https://en.wikipedia.org/wiki/Partition_(number_theory)を参照してください。 –
http://docs.sympy.org/dev/_modules/sympy/ntheory/partitions_.htmlで、コードをnpartitionsに対してベンチマークすることができます。 –