結果
| 問題 | No.783 門松計画 | 
| コンテスト | |
| ユーザー |  rlangevin | 
| 提出日時 | 2023-10-12 12:07:22 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 272 ms / 2,000 ms | 
| コード長 | 1,119 bytes | 
| コンパイル時間 | 342 ms | 
| コンパイル使用メモリ | 82,048 KB | 
| 実行使用メモリ | 78,500 KB | 
| 最終ジャッジ日時 | 2024-09-14 11:02:10 | 
| 合計ジャッジ時間 | 3,949 ms | 
| ジャッジサーバーID (参考情報) | judge3 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 27 | 
ソースコード
def kadomatsu(a, b, c):
    if a == b or b == c or c == a:
        return False
    if a < b < c or a > b > c:
        return False
    return True
N, C = map(int, input().split())
L = list(map(int, input().split()))
W = list(map(int, input().split()))
M = 50
ans = 0
inf = 10 ** 18
dp = [[[-inf] * (M + 1) for i in range(M + 1)] for j in range(C + 1)] 
for i in range(N):
    for j in range(N):
        for k in range(N):
            if not kadomatsu(L[i], L[j], L[k]):
                continue
            if W[i] + W[j] + W[k] > C:
                continue
            dp[W[i] + W[j] + W[k]][L[j]][L[k]] = max(dp[W[i] + W[j] + W[k]][L[j]][L[k]], L[i] + L[j] + L[k])
for c in range(C + 1):
    for a in range(M + 1):
        for b in range(M + 1):
            if dp[c][a][b] == -inf:
                continue
            for i in range(N):
                if not kadomatsu(a, b, L[i]):
                    continue
                if c + W[i] > C:
                    continue
                dp[c + W[i]][b][L[i]] = max(dp[c + W[i]][b][L[i]], dp[c][a][b] + L[i])
            ans = max(ans, dp[c][a][b])
print(ans)
            
            
            
        