結果
問題 | No.286 Modulo Discount Store |
ユーザー |
|
提出日時 | 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 |
ソースコード
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]