結果

提出番号 2450
提出者 keyball44
言語 Python3
提出日時 2025-01-03 10:36:00
問題名 (70)アルゴリズムのお勉強
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 22ms 32976KB
2 AC 100% 23ms 32688KB
3 AC 100% 24ms 33024KB
4 AC 100% 21ms 32688KB
5 AC 100% 21ms 32928KB
6 AC 100% 25ms 33120KB
7 AC 100% 22ms 32752KB
8 AC 100% 21ms 32656KB
9 AC 100% 21ms 33360KB
10 AC 100% 19ms 33376KB
11 AC 100% 45ms 33024KB
12 AC 100% 32ms 32944KB
13 AC 100% 44ms 32640KB
14 AC 100% 31ms 32944KB
15 AC 100% 31ms 32672KB
16 AC 100% 21ms 32656KB
17 AC 100% 19ms 32848KB
18 AC 100% 22ms 32752KB
19 AC 100% 75ms 32816KB
20 AC 100% 73ms 32832KB
21 AC 100% 23ms 32592KB
22 AC 100% 116ms 33392KB
23 AC 100% 27ms 33056KB
24 AC 100% 295ms 33616KB
25 AC 100% 73ms 33024KB
26 AC 100% 137ms 32784KB
27 AC 100% 280ms 32912KB
28 AC 100% 72ms 33440KB
29 AC 100% 1181ms 38672KB
30 AC 100% 121ms 33088KB

ソースコード

inf = 10**12
import sys
N = int(input())
t = list(map(int, input().split()))
a = []
for i in range(N):
    a.append(list(map(int, input().split())))
DP = [inf for _ in range(1<<N)]
#DP[bitset] := bitsetの状態まで最適に勉強したときにかかる時間
DP[0] = 0
for bitset in range(1<<N):
    for nx in range(N):
        if (bitset >> nx)&1:#既にnxを学んでいるので飛ばす
            continue
        learncost = t[nx]
        for i in range(N):
            if (bitset >> i)&1:
                learncost -= a[i][nx]
        learncost = max(0,learncost)
        DP[bitset | (1 << nx)] = min(DP[bitset | (1 << nx)], DP[bitset] + learncost)
print(DP[-1])