結果

問題 No.286 Modulo Discount Store
ユーザー gahougahou
提出日時 2016-11-15 13:56:45
言語 Python2
(2.7.18)
結果
AC  
実行時間 920 ms / 2,000 ms
コード長 528 bytes
コンパイル時間 86 ms
コンパイル使用メモリ 6,912 KB
実行使用メモリ 6,912 KB
最終ジャッジ日時 2024-11-26 01:41:20
合計ジャッジ時間 4,756 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 40
権限があれば一括ダウンロードができます

ソースコード

diff #

def minBuy(M,dp,st):
  minSum=10**9
  i=0
  while True:
    if st&2**i!=0:
      k=0
      tmpSum=0
      while True:
        if st<2**k: break
        if i==k:
          k+=1
          continue
        if st&2**k!=0:
          tmpSum+=M[k]
        k+=1
      minSum=min(minSum,dp[st-2**i]+max(0,M[i]-tmpSum%1000))
    i+=1
    if st<2**i: break
  return minSum

N=int(raw_input())
M=[]
for _ in xrange(N):
  M.append(int(raw_input()))
dp=[10**9]*(2**N)
dp[0]=0
for i in xrange(1,2**N):
  dp[i] = minBuy(M,dp,i)
print dp[2**N-1]
0