結果

問題 No.3634 Made to order
コンテスト
ユーザー snrnsidy
提出日時 2026-08-21 22:41:54
言語 C++17
(gcc 15.2.0 + boost 1.90.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 61 ms / 2,000 ms
+ 961µs
コード長 1,274 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,047 ms
コンパイル使用メモリ 214,560 KB
実行使用メモリ 163,700 KB
最終ジャッジ日時 2026-08-21 22:42:00
合計ジャッジ時間 4,449 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
サブタスク $1$ 20 % AC * 8
サブタスク $2$ 10 % AC * 21
サブタスク $3$ 70 % AC * 26
合計 3 * 100% = 300 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>

using namespace std;

int n,d;
int a[13];
int b[13];
int c[13];
int dp[1<<13][5001];

int main(void)
{
	cin.tie(0);
	ios::sync_with_stdio(false);

    cin >> n >> d;
    for(int i=0;i<n;i++)
    {
        cin >> a[i] >> b[i] >> c[i];
    }

    for(int i=0;i<(1<<n);i++)
    {
        for(int j=0;j<=d;j++)
        {
            dp[i][j] = 1e9;
        }
    }

    dp[0][0] = 0;

    for(int i=0;i<(1<<n);i++)
    {
        int A = 0;
        for(int j=0;j<n;j++)
        {
            if((i&(1<<j))) A += a[j];
        }

        if(A > d) continue;
        for(int j=0;j<=d;j++)
        {
            if(dp[i][j] >= 1e9) continue;
            for(int k=0;k<n;k++)
            {
                if((i&(1<<k))==0)
                {
                    int ni = i + (1<<k);
                    int B = max(A + a[k],j) + b[k];
                    int C = max(B,dp[i][j]) + c[k];
                    if(B <= d)
                    {
                        dp[ni][B] = min(dp[ni][B],C);
                    }
                }
            }
        }
    }

    for(int i=0;i<=d;i++)
    {
        if(dp[(1<<n)-1][i] <= d)
        {
            cout << "Yes" << '\n';
            return 0;
        }
    }

    cout << "No" << '\n';
    
	return 0;
}
0