結果

問題 No.3634 Made to order
コンテスト
ユーザー kidodesu
提出日時 2026-08-21 22:17:40
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 156 ms / 2,000 ms
+ 611µs
コード長 840 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 244 ms
コンパイル使用メモリ 95,848 KB
実行使用メモリ 89,516 KB
最終ジャッジ日時 2026-08-21 22:17:49
合計ジャッジ時間 8,289 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
サブタスク $1$ 20 % AC * 8
サブタスク $2$ 10 % AC * 21
サブタスク $3$ 70 % AC * 26
合計 3 * 100% = 300 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

def main():
    n, d = list(map(int, input().split()))
    A = [list(map(int, input().split())) for _ in range(n)]
    inf = 1<<60
    N = 1<<n
    dp = [[] for _ in range(N)]
    dp[0] = [(0, 0)]
    for bit in range(N):
        X = [u for u in range(n) if bit >> u & 1]
        Y = [u for u in range(n) if not bit >> u & 1]
        Z = []
        a = sum([A[u][0] for u in X])
        dp[bit].sort()
        for b, c in dp[bit]:
            if not Z or Z[-1][1] > c:
                Z.append((b, c))
        for v in Y:
            ma, mb, mc = A[v]
            for b, c in Z:
                na = ma+a
                nb = max(na, b)+mb
                nc = max(nb, c)+mc
                dp[bit|1<<v].append((nb, nc))
    ans = min([a[1] for a in dp[-1]])
    if ans <= d:
        return "Yes"
    else:
        return "No"
print(main())
0