結果

問題 No.357 品物の並び替え (Middle)
ユーザー gahougahou
提出日時 2016-11-15 13:37:24
言語 Python2
(2.7.18)
結果
AC  
実行時間 239 ms / 5,000 ms
コード長 527 bytes
コンパイル時間 274 ms
コンパイル使用メモリ 7,040 KB
実行使用メモリ 6,912 KB
最終ジャッジ日時 2024-05-04 13:51:31
合計ジャッジ時間 1,867 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 11 ms
6,272 KB
testcase_01 AC 10 ms
6,144 KB
testcase_02 AC 11 ms
6,144 KB
testcase_03 AC 11 ms
6,272 KB
testcase_04 AC 10 ms
6,272 KB
testcase_05 AC 10 ms
6,272 KB
testcase_06 AC 9 ms
6,400 KB
testcase_07 AC 9 ms
6,272 KB
testcase_08 AC 13 ms
6,272 KB
testcase_09 AC 80 ms
6,528 KB
testcase_10 AC 29 ms
6,400 KB
testcase_11 AC 21 ms
6,400 KB
testcase_12 AC 239 ms
6,912 KB
testcase_13 AC 112 ms
6,400 KB
testcase_14 AC 90 ms
6,528 KB
testcase_15 AC 16 ms
6,272 KB
testcase_16 AC 50 ms
6,272 KB
testcase_17 AC 30 ms
6,400 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

def maxProfit(board,dp,_st):
  st=_st
  maxP=0
  i=0
  while True:
    bonus=0
    if st & 2**i != 0 and i in board:
      for k,s in board[i].items():
        if st & 2**k != 0:
          bonus += s
      maxP = max(maxP, dp[st-2**i]+bonus)
    i+=1
    if st<2**i: break
  return maxP

N,M=map(int,raw_input().split())
board={}
for _ in xrange(M):
  i1,i2,s=map(int,raw_input().split())
  if i2 not in board: board[i2]={}
  board[i2][i1]=s
dp=[0]*(2**N)
for i in xrange(1,2**N):
  dp[i]=maxProfit(board,dp,i)
print dp[2**N-1]
0