結果
| 問題 |
No.286 Modulo Discount Store
|
| コンテスト | |
| ユーザー |
efunyo
|
| 提出日時 | 2020-03-27 13:31:56 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 596 ms / 2,000 ms |
| コード長 | 1,082 bytes |
| コンパイル時間 | 329 ms |
| コンパイル使用メモリ | 12,288 KB |
| 実行使用メモリ | 11,392 KB |
| 最終ジャッジ日時 | 2025-01-02 08:32:00 |
| 合計ジャッジ時間 | 4,581 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 40 |
ソースコード
#https://yukicoder.me/problems/528
def main():
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**7)
from collections import Counter, deque
#from collections import defaultdict
from itertools import combinations, permutations, accumulate
#from itertools import product
from bisect import bisect_left,bisect_right
import heapq
from math import floor, ceil
#from operator import itemgetter
inf = 10**17
#mod = 10**9 + 7
N = int(input())
M = [int(input()) for _ in range(N)]
dp = [inf]*(1<<N)
dp[-1] = 0
def dfs(s):
if dp[s]!=inf:
return dp[s]
for i in range(N):
if s&(1<<i):
continue
#品物iを買うことでかかる金額
total = 0
for j in range(N):
if s&(1<<j):
total += M[j]
cost = max(M[i] - total%1000, 0)
dp[s] = min(dp[s], dfs(s|(1<<i)) + cost)
return dp[s]
print(dfs(0))
if __name__ == '__main__':
main()
efunyo