結果

問題 No.3634 Made to order
コンテスト
ユーザー LyricalMaestro
提出日時 2026-08-22 02:18:37
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 298 ms / 2,000 ms
+ 989µs
コード長 1,513 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 239 ms
コンパイル使用メモリ 96,108 KB
実行使用メモリ 118,008 KB
最終ジャッジ日時 2026-08-22 02:18:47
合計ジャッジ時間 9,647 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

# https://yukicoder.me/problems/no/3634

MAX_INT = 10 ** 18


def main():
    N, D = map(int, input().split())
    abc = []
    for _ in range(N):
        a, b, c = map(int, input().split())
        abc.append((a, b, c))

    a_sum_list = [0 for _ in range(2 ** N)]
    for bit in range(2 ** N):
        a_sum = 0
        for i in range(N):
            if bit & (1 << i) > 0:
                a_sum += abc[i][0]

        a_sum_list[bit] = a_sum


    dp = [{} for _ in range(2 ** N)]
    dp[0][0] = 0
    for bit in range(2 ** N):
        for i in range(N):
            if bit & (1 << i) > 0:
                continue

            new_bit = bit | (1 << i)
            _, b, c = abc[i]
            new_a_sum = a_sum_list[new_bit]
            if new_a_sum <= D:
                for b_end_day_key, min_c_end_value in dp[bit].items():
                    new_b_end_day_key = max(b_end_day_key, new_a_sum) + b
                    if new_b_end_day_key <= D:
                        new_min_c_end_value = max(min_c_end_value, new_b_end_day_key) + c
                        if new_b_end_day_key not in dp[new_bit]:
                            dp[new_bit][new_b_end_day_key] = MAX_INT
                        dp[new_bit][new_b_end_day_key] = min(dp[new_bit][new_b_end_day_key] , new_min_c_end_value)

    for b_end_day_key, min_c_end_value in dp[-1].items():
        if min_c_end_value <= D:
            print("Yes")
            return

    print("No")
                






    





if __name__ == "__main__":
    main()
0