結果
| 問題 |
No.783 門松計画
|
| コンテスト | |
| ユーザー |
norioc
|
| 提出日時 | 2025-11-23 04:26:01 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 289 ms / 2,000 ms |
| コード長 | 977 bytes |
| コンパイル時間 | 511 ms |
| コンパイル使用メモリ | 82,184 KB |
| 実行使用メモリ | 78,280 KB |
| 最終ジャッジ日時 | 2025-11-23 04:26:06 |
| 合計ジャッジ時間 | 4,220 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 27 |
ソースコード
def list3(a, b, c, *, val=0):
return [[[val] * c for _ in range(b)] for _ in range(a)]
N, C = map(int, input().split())
L = list(map(int, input().split()))
W = list(map(int, input().split()))
sz = 51
dp = list3(sz, sz, sz)
for i in range(N):
for j in range(N):
if L[i] == L[j]: continue
c = W[i] + W[j]
if c > C: continue
a = L[i]
b = L[j]
dp[c][a][b] = max(dp[c][a][b], a + b)
ans = 0
for i in range(sz): # コスト
for j in range(sz): # 二つ前の門松
for k in range(sz): # 一つ前の門松
if dp[i][j][k] == 0: continue
for l, w in zip(L, W):
if i + w > C: continue
if j < k > l and j != l:
dp[i+w][k][l] = max(dp[i+w][k][l], dp[i][j][k] + l)
if j > k < l and j != l:
dp[i+w][k][l] = max(dp[i+w][k][l], dp[i][j][k] + l)
ans = max(ans, dp[i+w][k][l])
print(ans)
norioc