結果
問題 | No.783 門松計画 |
ユーザー | maspy |
提出日時 | 2020-03-17 14:56:04 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
AC
|
実行時間 | 669 ms / 2,000 ms |
コード長 | 1,203 bytes |
コンパイル時間 | 131 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 44,552 KB |
最終ジャッジ日時 | 2024-07-23 12:24:17 |
合計ジャッジ時間 | 16,784 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 521 ms
44,544 KB |
testcase_01 | AC | 537 ms
44,164 KB |
testcase_02 | AC | 528 ms
44,416 KB |
testcase_03 | AC | 526 ms
44,420 KB |
testcase_04 | AC | 531 ms
44,296 KB |
testcase_05 | AC | 518 ms
44,420 KB |
testcase_06 | AC | 521 ms
44,552 KB |
testcase_07 | AC | 518 ms
44,552 KB |
testcase_08 | AC | 515 ms
44,548 KB |
testcase_09 | AC | 513 ms
44,544 KB |
testcase_10 | AC | 599 ms
44,164 KB |
testcase_11 | AC | 669 ms
44,392 KB |
testcase_12 | AC | 634 ms
44,428 KB |
testcase_13 | AC | 540 ms
44,552 KB |
testcase_14 | AC | 561 ms
44,424 KB |
testcase_15 | AC | 533 ms
44,544 KB |
testcase_16 | AC | 524 ms
44,284 KB |
testcase_17 | AC | 528 ms
44,548 KB |
testcase_18 | AC | 525 ms
44,548 KB |
testcase_19 | AC | 555 ms
44,544 KB |
testcase_20 | AC | 523 ms
44,048 KB |
testcase_21 | AC | 528 ms
44,288 KB |
testcase_22 | AC | 527 ms
44,176 KB |
testcase_23 | AC | 524 ms
44,296 KB |
testcase_24 | AC | 543 ms
44,548 KB |
testcase_25 | AC | 532 ms
44,040 KB |
testcase_26 | AC | 548 ms
44,300 KB |
ソースコード
#!/usr/bin/env python3.8 # %% import sys read = sys.stdin.buffer.read readline = sys.stdin.buffer.readline readlines = sys.stdin.buffer.readlines import numpy as np import itertools # %% N, C = map(int, readline().split()) L = np.array(readline().split(), np.int32) W = np.array(readline().split(), np.int32) # %% INF = 10 ** 4 # %% dp = np.full((C + 1, N, N), -INF, np.int32) for i, j in itertools.product(range(N), repeat=2): if L[i] == L[j]: continue cost = W[i] + W[j] if cost < C: dp[cost, i, j] = L[i] + L[j] # %% for c in range(1, C + 1): for k in range(N): newc = c + W[k] if newc > C: continue cond1 = (L != L[k])[:, None] cond2 = (L[:, None] < L[None, :]) & (L > L[k])[None, :] cond3 = (L[:, None] > L[None, :]) & (L < L[k])[None, :] cond = cond1 & (cond2 | cond3) add = L[k] - (~cond) * INF np.maximum(dp[newc][:, k], (dp[c] + add).max(axis=0), out=dp[newc][:, k]) # %% for i, j in itertools.product(range(N), repeat=2): if L[i] == L[j]: continue cost = W[i] + W[j] if cost < C: dp[cost, i, j] = -INF # %% answer = max(0, dp.max()) print(answer)