Algorithm python)最大限に



質問リンク:https://www.acmicpc.net/problem/10819
これはすべての状況を考慮した組合せ問題である.
ライブラリitertoolsの置換を使用すると、解法が簡略化されます.
ライブラリではなく、苦労した部分を記録します.
from itertools import permutations

n = int(input())
number = list(map(int, input().split()))
maxNumber = 0

permutationNumber = permutations(number, n)

for i in permutationNumber:
    ans = 0
    for j in range(1, len(i)):
        ans += abs(i[j-1] - i[j])
    maxNumber = max(maxNumber, ans) 

print(maxNumber)
n = int(input())
check = [True] * n
num = list(map(int, input().split()))

inner = []
ans = []
def permutation(depth, n):
    if(depth == n+1):
        ans.append((inner))
        return 
    for i in range(n):
        if(check[i]):
            check[i] = False
            inner.append(num[i])
            permutation(depth+1, n)
            inner.pop()
            check[i] = True

permutation(1, n)
print(ans)
上のコードは正解を出力するコードではありません.途中
if(depth == n+1):
        ans.append((inner))
        return 
これは,再帰関数から離れたブロックにおいて,組合せのn個の数字が正しく追加されているかを確認する過程である.

ansを出力すると、空のリストが出力されます.
if(depth == n+1):
        ans.append(list(inner))
        return 
リスト(内部)に変更します.
Pythonの基礎知識が不足している
n = int(input())
check = [True] * n
num = list(map(int, input().split()))

inner = []
ans = []
def permutation(depth, n):
    if(depth == n+1):
        ans.append(sum(abs(inner[k-1] - inner[k]) for k in range(n-1)))
        return 
    for i in range(n):
        if(check[i]):
            check[i] = False
            inner.append(num[i])
            permutation(depth+1, n)
            inner.pop()
            check[i] = True

permutation(1, n)

print(max(ans))

再帰関数を使用して、すべての場合の数値を取得します.
前回解答した标题:NとM(1)題のコアは両者が同じであることがわかる.アルゴリズムの問題を解くとき,外見が異なっていてもコア部分は同じことを繰り返す.