結果

問題 No.3634 Made to order
コンテスト
ユーザー snrnsidy
提出日時 2026-08-21 22:27:46
言語 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
結果
WA  
実行時間 -
コード長 1,522 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,099 ms
コンパイル使用メモリ 214,540 KB
実行使用メモリ 9,408 KB
最終ジャッジ日時 2026-08-21 22:27:51
合計ジャッジ時間 4,241 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
サブタスク $1$ 20 % AC * 8
サブタスク $2$ 10 % AC * 16 WA * 5
サブタスク $3$ 70 % AC * 21 WA * 5
合計 3 * 20% = 60 点
権限があれば一括ダウンロードができます

ソースコード

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][3];

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<3;j++)
        {
            dp[i][j] = 1e9;
        }
    }

    dp[0][0] = 0;
    dp[0][1] = 0;
    dp[0][2] = 0;

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

    if(dp[(1<<n)-1][2] <= d)
    {
        cout << "Yes" << '\n';
    }
    else
    {
        cout << "No" << '\n';
    }

	return 0;
}
0