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)題のコアは両者が同じであることがわかる.アルゴリズムの問題を解くとき,外見が異なっていてもコア部分は同じことを繰り返す.
Reference
この問題について(Algorithm python)最大限に), 我々は、より多くの情報をここで見つけました https://velog.io/@jeongdopark/Algorithm-python-백준-10819번-차이를-최대로テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol