提出 #21505379


ソースコード 拡げる

import sys
sys.setrecursionlimit(10 ** 9) #再帰回数の限界を変更

N,A,B,C = map(int, input().split())
L=[]
for _ in range(N):
    L.append(int(input()))

ans = 10**20

#n→回数
#a,b,c→それぞれ得ようとしているA,B,Cの竹を作るために使用している現在の長さ
#mp→現在の合成魔法による使用mp
def dfs(n,a,b,c,mp):
    global ans #グローバル変数のansを参照します
    # 全て使用するか決定したら打ち切り
    if n == N:
        if a==0 or b==0 or c==0:
            #無からの生成は禁止
            return
        #延長短縮はabsで判断できる
        ans = min(ans,abs(A-a)+abs(B-b)+abs(C-c)+mp)
        return
    #L[n]をどれに使用するか選択
    dfs(n+1,a+L[n],b,c,mp+10)#a
    dfs(n+1,a,b+L[n],c,mp+10)#b
    dfs(n+1,a,b,c+L[n],mp+10)#c
    dfs(n+1,a,b,c,mp)#どれにも使用しない

dfs(0,0,0,0,-30)#ちょっと汚いですが、どれか一つ選択は合成扱いでないため、mpを-30からスタート
print(ans)

提出情報

提出日時
問題 C - Synthetic Kadomatsu
ユーザ H20
言語 PyPy3 (7.3.0)
得点 300
コード長 1062 Byte
結果 AC
実行時間 82 ms
メモリ 68668 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 300 / 300
結果
AC × 3
AC × 20
セット名 テストケース
Sample a01, a02, a03
All a01, a02, a03, b04, b05, b06, b07, b08, b09, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20
ケース名 結果 実行時間 メモリ
a01 AC 75 ms 62384 KiB
a02 AC 72 ms 68512 KiB
a03 AC 76 ms 68428 KiB
b04 AC 52 ms 62080 KiB
b05 AC 72 ms 68384 KiB
b06 AC 54 ms 62128 KiB
b07 AC 52 ms 62120 KiB
b08 AC 69 ms 67960 KiB
b09 AC 67 ms 68404 KiB
b10 AC 79 ms 68260 KiB
b11 AC 77 ms 68500 KiB
b12 AC 75 ms 68500 KiB
b13 AC 78 ms 68092 KiB
b14 AC 80 ms 68504 KiB
b15 AC 78 ms 68368 KiB
b16 AC 72 ms 68368 KiB
b17 AC 79 ms 68408 KiB
b18 AC 78 ms 68560 KiB
b19 AC 77 ms 68668 KiB
b20 AC 82 ms 68604 KiB